我试图找到这个问题的答案,但没有一个答案适合。
我有两个数据库,一个有15.000.000个条目,我想提取必要的数据并将其存储在一个小得多的数据库中,大约有33000个条目。两个数据库同时打开。或者至少它们应该是。
在打开大数据库并从中提取条目时,是否可以检查较小数据库中某个表中是否已存在该值?我只需要一些检查它的通用方法。
在我的代码中我首先打开两个数据库(大的是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完全为空时,它会正确执行。
但是,我需要它只更新数据库IF一个条目(根据是否存在某个'id')不存在。
编辑:我将改述我的问题。从查询结果(大数据库)我得到每一行的字符串。例如$ string。如何打开第二个数据库并检查oddsnavi_baby.calc表是否在列事件中具有$ string值?答案 0 :(得分:2)
如果Id是唯一键,请跳过检查并尝试INSERT IGNORE
。
答案 1 :(得分:1)
伙计,我记得曾经遇到过这样的问题。我认为我们实际上走的是缓慢而昂贵的路线并编写了一个脚本来一次拉一个条目,比较它,如果它还不存在则插入它。 但是,我发现这篇文章,听起来似乎对你有所帮助:
祝你好运:)答案 2 :(得分:0)
为什么你真的需要多个数据库?金额无关紧要,表格很好,无需拆分。
//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
}