0

データベースに2つのテーブルがあります。Table1はユーザーを格納し、Table2はユーザーによって生成されたデータを格納します。

エラーのため、Table1の一部のユーザーは、Table2にデータを持っていません。これらのユーザーに通知したいと思います。

私はMySQLを使用していくつかの方法でこれを試しています。しかし、PHPmyAdminがフリーズするか、PHPがタイムアウトするため、何も機能しません。これは、最初のテーブルに28.000行が含まれ、2番目のテーブルに80.000行が含まれていることが原因である可能性があります。過去5日間だけ必要です。

トライアル番号1

SELECT gebruikers.g_id
FROM gebruikers LEFT JOIN objecten ON objecten.o_g_id=gebruikers.g_id
WHERE objecten.o_g_id IS NULL

EXPLAIN SELECT

id  select_type     table   type    possible_keys   key     key_len     ref     rows    Extra
1   SIMPLE  gebruikers  index   NULL    PRIMARY     4   NULL    25227   Using index
1   SIMPLE  objecten    ALL     NULL    NULL    NULL    NULL    81002   Using where; Not ex

トライアル番号2

SELECT g_id FROM gebruikers
WHERE g_id NOT IN(SELECT o_g_id FROM objecten WHERE o_startdatum <= NOW() AND o_startdatum >=NOW() - INTERVAL 5 DAY)

私は何が間違っているのですか?

4

2 に答える 2

0

「Trialnr1」は、2番目のテーブルにnull値がある場合は問題ありませんが、nullではなくフィールド値が空である可能性があるため、または句objecten.o_g_id=''を使用する必要があります。最終的なクエリは次のようになります。SELECTgebruikers.g_idFROMgebruikers LEFT JOIN objecten ON objecten.o_g_id = gebruikers.g_id WHERE(objecten.o_g_id IS NULL)または(trim(objecten.o_g_id)='')

于 2013-01-29T13:28:52.063 に答える
0

必要なレコードを取得するためのクエリ:

SELECT 
    gebruikers.g_id
FROM
    gebruikers
        LEFT JOIN
    objecten ON objecten.o_g_id = gebruikers.g_id
WHERE
    objecten.o_g_id IS NULL
        and o_startdatum <= NOW()
        AND o_startdatum >= (NOW() - INTERVAL 5 DAY);
于 2013-01-29T13:54:50.900 に答える