0

基本的な where 句に従ってテーブルから行を取得しようとしていますが、最後に「AND EXISTS」句を含めたいと考えています。私のコードは次のとおりです。

$stmt = $mysqli->prepare("SELECT object_id FROM ".
          $db_table_prefix."user_events
          WHERE LPAD(start_timestamp,15,'0') < LPAD(?,15,'0')
          AND event_id = ?
          AND EXISTS ( 
            SELECT * FROM ".$db_table_prefix."user_events
              WHERE LPAD(start_timestamp,15,'0') > LPAD(?,15,'0')
              AND event_id = ? )
        ");

私が抱えている問題は、AND EXISTS サブクエリ内のメイン クエリから列の値を指定する方法がわからないことです。

このビットをサブクエリに追加する方法を探しています:

AND object_id = **object_id from main query**

どんな助けでも大歓迎

4

3 に答える 3

1

ではなく、EXISTSここでは自己結合構文の方が明確であることに気付くかもしれません。コードから必要なものを正確に推測することはできませんがobject_id、特定の時間の前に開始され、後で再び開始されたイベントを取得するには:

SELECT  ue1.object_id 
FROM    user_events ue1 join user_events ue2
WHERE   ue1.event_id = ue2.event_id AND
        ue1.object_id = ue2.object_id AND
        ue1.event_id = ? AND 
        LPAD(ue1.start_timestamp, 15, '0') < LPAD(ue2.start_timestamp, 15, '0') AND 
        LPAD(ue1.start_timestamp, 15, '0') < LPAD(?, 15, '0')
于 2013-10-08T09:54:02.280 に答える
1

また、混乱を避けるために、サブクエリのテーブルにエイリアスを追加しました

$stmt = $mysqli->prepare("SELECT object_id FROM ".
      $db_table_prefix."user_events
      WHERE LPAD(start_timestamp,15,'0') < LPAD(?,15,'0')
      AND event_id = ?
      AND EXISTS ( 
        SELECT * FROM ".$db_table_prefix."user_events AS u
          WHERE LPAD(u.start_timestamp,15,'0') > LPAD(?,15,'0')
          AND u.object_id = " .$db_table_prefix.".object_id
          AND u.event_id = ? )
    ");
于 2013-10-08T09:51:25.607 に答える
0

および object_id in (select object_id from ...

于 2013-10-08T09:45:20.087 に答える