2012-05-08 14 views
1

こんにちは私は新しいCLAUSEを追加する助けが必要です、これはかなり進歩しており、私はそれを理解できません。 // ect.author_idクエリexp_channel_titles table author_id列を使用して、これらの行をスキャンして最終結果を取得します。 IF ect.status = 'Members-id5' AND ect.status = 'complete'で決定するには... ect.entry_idにMembers-id5の行を使用します。私の質問は私がそれをどうやってするのだろうか?私は新しいCLAUSEを仮定するか、あるいはクエリーさえすればいいと思うところに印をつけたが、間違っている可能性がある。LEFT JOINクエリに追加

私の問題は、最大5つの異なるect.entry_idですので、status = Members_id5の行にあるものを分離しようとしていますが、status = completeも存在する場合のみです。これは、私は配列の任意の考えでPHPでやらなければならないだろうかのように思える?あなたは一つのレコードect.status =「メンバー-ID5」とect.statusは=「完了」ここで別のものを持っている人を見つけたいと思うように

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 = 'Members-id5'とect.status = 'complete''という表現は、どのように真実になりますか?それは論理的に矛盾します。あなたは何を意味するのか説明できますか? ANDの代わりにORを意味しますか? –

+0

@MarkByersは、新しいクエリが出現する場所です。私はexp_channel_titlesをect.author_idで照会して、約3〜5の結果を得たいと考えています。これらの結果では、ステータス列をチェックして、完全な行とメンバーid5の2つの行があるかどうかを確認したいと考えています。それが本当であれば、メンバーid5を持つ行を取り出し、それをect.entry_idで使用します。 – acctman

答えて

1

はあなたのコメントに基づいて、それが聞こえます。 SELECTクエリをそれらの個人だけに適用したいとします。これは、WHERE句内の2つのサブクエリを使用して行うことができます。このような何か:

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") 

最初のサブクエリは、著者ID場合は、現在検討中で参照するには、「メンバー-ID5」それで、とIN句をチェックして少なくとも1つのレコードを持っているすべての著者IDのリストを生成し、それらの一つです。 2つ目は、「完了」のレコードを持つすべての作者IDのリストでも同じことです。両方の条件が真であれば、その個人はレコードを返すものであることを意味します。

私はあなたのデータ構造に精通していないので、これは必要な正確なコードではないかもしれません(特に、ect.author_idは実際に比較するフィールドではないかもしれませんが)。

2

あなたが問題を正しく理解している場合は、exp_channel_titlesのステータスは "Members-id5"ですが、author_idにはステータスが "完了"のレコードがもう1つしかありません。テーブルの上に

私は右、私はあなただけ(INNER)が外側(残っていない、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を返します。