2012-05-08 74 views
1

您好我需要幫助增加一個新的條款,這是一個對我來說很先進,我不能弄明白。 //使用ect.author_id查詢exp_channel_titles表author_id列並掃描這些行以獲取最終結果。由IF ect.status ='Members-id5'和ect.status ='complete'確定...然後使用具有Members-id5的行作爲ect.entry_id。我的問題是我將如何做到這一點?我標記了我在哪裏假設新的CLAUSE,或者甚至可能會查詢,但我可能是錯的。添加到一個LEFT JOIN查詢

我的問題是有多達5種不同ect.entry_id所以我試圖找出一個與狀態= Members_id5行中,但只有當狀態=完全存在的。這似乎是我必須做的PHP與數組的任何想法?

SELECT 
      ect.entry_id 
     , ect.author_id 
     , ect.title 
     , ect.status 
     , ecd.field_id_13 
     , ecd.field_id_14 
     , ecd.field_id_15 
     , ecd.field_id_25 
     , ecd.field_id_27 
     , ecd.field_id_28 
     , ecd.field_id_29 
     , ecd.field_id_30 
     , ecd.field_id_31 
     , ecd.field_id_32 
     , ecd.field_id_33 
     , ecd.field_id_34 
     , ecd.field_id_35 
     , exm.email 
    FROM exp_channel_titles as ect 
    LEFT JOIN exp_channel_data as ecd 
     ON ecd.entry_id = ect.entry_id 
    LEFT JOIN exp_members as exm 
     ON exm.member_id = ect.author_id 

// new CLAUSE 

    WHERE ect.title LIKE '%Member%' 
    AND ect.status = 'Members-id5' 
+2

如何表達'ect.status = '成員-ID5' AND ect.status =「complete''永遠是真的嗎?這在邏輯上與自己相矛盾。你能解釋一下你的意思嗎?你是指OR而不是AND? –

+0

@MarkByers這是新的查詢將發揮作用。我想用ect.author_id查詢exp_channel_titles,這會得到3-5個結果。有了這些結果,我想檢查狀態列,看它是否有兩行,一行完整,另一行帶有members-id5。如果它是真的,則使用具有member-id5的行並在ect.entry_id處使用該行。 – acctman

回答

1

基於您的評論,這聽起來像你想找到誰擁有一個記錄,其中ect.status =「會員-ID5」而另一種ect.status =「完成」的個人。然後,您希望SELECT查詢僅適用於這些個人。您可以在WHERE子句中使用兩個子查詢來完成此操作。事情是這樣的:

WHERE ect.title LIKE '%Member%' 
AND ect.author_id IN 
    (select author_id from exp_channel_titles where ect.status = "Members-id5") 
AND ect.author_id IN 
    (select author_id from exp_channel_titles where ect.status = "complete") 

第一個子查詢生成它具有至少一個記錄以「會員制ID5」所有作者ID和IN子句檢查的列表,看看目前正在審議的作者ID是其中之一。第二個與具有「完整」記錄的所有作者ID列表相同。如果兩個條件都是真的,那就意味着個人就是你想要返回的記錄。

我對您的數據結構並不熟悉,所以這可能不是您需要的確切代碼(特別是,ect.author_id實際上可能不是用於比較的字段),但希望這可以爲您提供想法。

2

如果我正確理解你的問題,你只想返回exp_channel_titles記錄where status =「Members-id5」,但是其author_id存在另一個狀態爲「Complete」的記錄。

如果我有這個權利,我相信,你只需要連接(INNER JOIN,沒有離開(外)JOIN)在桌子上一次:

JOIN exp_channel_titles as ect_status ON ect.author_id = ect_status.author_id AND ect.status = 'complete' 

該條款添加到您現有的查詢,應僅返回狀態爲「Members-id5」但具有狀態爲「complete」的匹配記錄的exp_channel_titles記錄。