0

この質問に対する答えを見つけようとしましたが、どれも適切な答えがありません。

2 つのデータベースがあり、1 つには 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 テーブルの適切な列に挿入します。これは、odsnavi_baby が完全に空の場合に適切に行われます。

ただし、(特定の「id」が存在するかどうかに基づいて) エントリが存在しない場合にのみ、データベースを更新する必要があります。

編集:質問を言い換えます。クエリ結果 (大きなデータベース) から、すべての行について文字列を取得しています。たとえば、$string. 2 番目のデータベースを開いて、odsnavi_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

男、私はかつてこのような問題に直面したことを覚えています. 私たちは実際には時間と費用のかかるルートをたどり、一度に 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 に答える