2013-10-08 27 views
0

我試圖根據某些基本的where子句從表中獲取行,現在我想在末尾包含「AND EXISTS」子句。我的代碼如下:MySQL獲取行在同一表中存在相應的行

$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 object_id = **object_id from main query** 

任何幫助表示讚賞

回答

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 = ?) 
    "); 
+0

這對我有效,我沒有意識到你可以在MySQL中別名:)非常感謝 – Allerion

0

和OBJECT_ID中(從選擇OBJECT_ID ...

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') 
+0

對不起,我應該進一步澄清,第二個事件實際上是一個不同的(不同的ID),但屬於同一個對象。我讀過EXISTS可能很耗時,所以我也會測試你的代碼。非常感謝 – Allerion

相關問題