2014-02-25 26 views
0

我試圖簡化我的代碼。選擇與查詢返回的結果相反

我目前有兩個查詢:一個選擇信息列表並輸出它與選擇框添加到用戶訂閱,然後第二個查詢來選擇用戶已訂閱的項目,但我試圖簡化代碼一個查詢。

我現在可以獲得代碼來顯示用戶已經訂閱了複選框的選項,但不是相反,有沒有辦法在WHERE子句中選擇相反的結果?

$selectionQuery = 'SELECT t1.subId, t1.subTitle FROM tbl_subs t1 LEFT JOIN tbl_list t2 ON t2.subId = t1.subId WHERE t2.userId = '.$id.' AND t1.subId = t2.subId'; 
+0

從數據庫的角度來看,首先單獨檢索所有可能的主題subID,然後使用查詢和該列表的輸出來計算相反的結果似乎更有效。另外,我相信你不需要LEFT JOIN。使用JOIN應該更有效。 – Ashalynd

+0

所以最好使用兩個查詢然後交叉檢查兩個輸出來找到相反的結果? –

+0

如果您要做很​​多這些「負面查詢」,並且您的主題沒有實時更改,那麼是的,因爲第一個查詢只執行一次,而「肯定」查詢比第二個查詢更快「消極」一個。 – Ashalynd

回答

0

這個代碼也許不是ANSISQL但它的作品完美的MYSQL。 (選擇tbl_list中的1作爲t2,其中t2.userId ='。$ id。'AND t1.subId = t2.subId)$ selectionQuery ='SELECT t1.subId,t1.subTitle FROM tbl_subs as t1 WHERE not exist 「;

+0

此方法完美運作。爲了澄清你基本上要求原始查詢檢查另一個不存在的記錄查詢? –

0

您已經加入LEFT JOIN部分的subId。從WHERE部分中刪除AND t1.subId = t2.subId',因爲它再次加入結果集並克服左連接。

正確:

$selectionQuery = 'SELECT t1.subId, t1.subTitle FROM tbl_subs t1 LEFT JOIN tbl_list t2 ON t2.subId = t1.subId WHERE t2.userId = '.$id.';