如何使用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值?
跳过检查并尝试仅使用INSERT IGNORE
,假设Id是唯一密钥。
我会继续这一点,并做一个完整的插入,并让它忽略错误。如果必须专门为数据库合并创建'唯一'约束。 – philwinkle 2012-04-06 22:28:29
优雅的解决方案,不会减慢速度 - 完美。谢啦。 – 2012-04-06 23:55:39
人,我记得来面对这样的问题一次。我认为我们实际上选择了慢而昂贵的路线,并编写了一个脚本来一次提取一个条目,并对其进行比较,如果尚未存在,则插入它。 然而,我发现这个职位,这听起来像它可能是对你有所帮助:
祝你好运:)
谢谢,很高兴看到作为概念证明,但对于这个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
}
我不应该触摸大数据库,因为它是从另一台服务器动态推送的。否则它会很容易。 – 2012-04-06 17:41:16
@DyanHoyrvat,无论哪种方式,我的答案给你的解决方案。 – Starx 2012-04-06 17:42:18
如果(mysql_num_rows($ result)){不是说**是什么** ... – 2012-04-06 18:21:34
很难说,不知道你的代码,你有什么尝试。 – kapa 2012-04-06 17:26:52
你可以创建一个presvent视图? – dynamic 2012-04-06 17:39:19