0

我试图找到这个问题的答案,但没有一个答案适合。

我有两个数据库,一个有 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、一、二)并将它们插入到名为 calc 的oddsnavi_baby 表中的适当列中。当oddsnavi_baby 完全为空时,它会正确执行此操作。

但是,我只需要它来更新数据库,如果一个条目(基于是否存在某个“id”)不存在。

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

4

3 回答 3

2

跳过检查并尝试INSERT IGNORE假设 Id 是唯一键。

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

于 2012-04-06T22:25:34.533 回答
1

伙计,我记得曾经遇到过这样的问题。我认为我们实际上走的是缓慢而昂贵的路线,并编写了一个脚本来一次提取一个条目,比较它,如果它不存在则插入它。但是,我找到了这篇文章,听起来它可能对您有所帮助:

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

祝你好运 :)

于 2012-04-06T17:30:18.640 回答
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
}
于 2012-04-06T17:35:40.197 回答