如何使用PHP检查做了SQL数据库已经有

问题描述:

我试图找到这个问题的答案,但没有一个答案合适。如何使用PHP检查做了SQL数据库已经有

我有两个数据库,一个有15.000.000条目,我想提取必要的数据,并将其与周围33.000条目存储在一个更小的数据库。两个数据库同时打开。或者至少他们应该是。

虽然具有很大的数据库打开并从中提取的条目,是可以检查该值是否已经存在于数据库较小某个表?我只需要一些通用的方法来检查。

在我的代码,我第一次打开这两个数据库(大者oddsnavi_push,小的是oddsnavi_baby):

$database = "oddsnavi_push";  
$db_handle = mysql_connect($server, $user_name, $password); 
$db_found = mysql_select_db($database, $db_handle); 
$database_baby = "oddsnavi_baby"; 
$db_handle_baby = mysql_connect($server, $user_name, $password); 
$db_found_baby = mysql_select_db($database_baby, $db_handle_baby); 

然后我开始阅读和计算oddsnavi_push数据:

$SQL_SELECT_ALL = "...giant query..."; 
$result_select_all = mysql_query($SQL_SELECT_ALL); 

while($db_field_all = mysql_fetch_assoc($result_select_all)) { 
$SQL_INSERT="INSERT INTO oddsnavi_baby.calc (id, one, two) VALUES ('$id', '$one', '$two')"; 

它一直工作到这一点。它将读取的数据(id,one,two)插入到名为calc的oddsnavi_baby表的适当列中。它在oddsnavi_baby完全为空时正确执行。

不过,我需要如果一个条目(基于一定的“身份证”是否存在)不存在,只更新数据库。

编辑:我会重组我的问题。从查询结果(大数据库),我得到字符串,为每一行。例如$ string。如何打开第二个数据库并检查oddsnavi_baby.calc表是否在列事件中具有$ string值?

+1

很难说,不知道你的代码,你有什么尝试。 – kapa 2012-04-06 17:26:52

+0

你可以创建一个presvent视图? – dynamic 2012-04-06 17:39:19

跳过检查并尝试仅使用INSERT IGNORE,假设Id是唯一密钥。

http://dev.mysql.com/doc/refman/5.5/en/insert.html

+0

我会继续这一点,并做一个完整的插入,并让它忽略错误。如果必须专门为数据库合并创建'唯一'约束。 – philwinkle 2012-04-06 22:28:29

+0

优雅的解决方案,不会减慢速度 - 完美。谢啦。 – 2012-04-06 23:55:39

人,我记得来面对这样的问题一次。我认为我们实际上选择了慢而昂贵的路线,并编写了一个脚本来一次提取一个条目,并对其进行比较,如果尚未存在,则插入它。 然而,我发现这个职位,这听起来像它可能是对你有所帮助:

http://www.mysqlfaqs.net/mysql-faqs/Tricky-Select-Queries/How-to-compare-data-of-two-tables-of-two-different-databases-in-MySQL

祝你好运:)

+0

谢谢,很高兴看到作为概念证明,但对于这个5 GB数据库的查询非常漫长而且缓慢。另一个联盟(我已经有四五个)会让它变得更慢。我将不得不尝试其他的东西。 – 2012-04-06 18:38:22

为什么你真的需要多个数据库?金额无关紧要表格很好,不需要拆分。

//Multiple links to different databases 
$dblink1 = mysqli_connect($localhost, $user, $pass, $db1); 
$dblink2 = mysqli_connect($localhost, $user, $pass, $db2); 


$id = '1'; // Id to check 
$query = "SELECT COUNT(*) FROM `table` WHERE id = '1' LIMIT 1"; 
$result = mysqli_query($dblink1, $query); //query db 1 

if(mysql_num_rows($result)) { 
    $query = "INSERT INTO `table` VALUES(.....)"; 
    $result = mysqli_query($dblink1, $query); //query db 2 
} 
+0

我不应该触摸大数据库,因为它是从另一台服务器动态推送的。否则它会很容易。 – 2012-04-06 17:41:16

+0

@DyanHoyrvat,无论哪种方式,我的答案给你的解决方案。 – Starx 2012-04-06 17:42:18

+0

如果(mysql_num_rows($ result)){不是说**是什么** ... – 2012-04-06 18:21:34