2

以前にこれを行ったことがあることは知っていますが、しばらく SQL をあまり行っていません。

Lead_detail というテーブルがあり、次の列があります: id, lead_id, form_id, .field_numbervalue

結果を取得してからフィルタリングしようとしています。

そのため、最初は、特定の質問に対して特定の回答があったすべてのリード ID を取得しました。

最初のフィルターが、「鶏肉は好きですか」という質問に対する「はい」の回答 (field_number of 4) のすべての結果が必要だったとします。

$leadIds = query(SELECT lead_id FROM lead_detail WHERE field_number = '4' AND value = 'yes' AND form_id = '1')
$leadIds = implode(', ', $leadIds);

次に、適切なフィルター処理されたデータを取得できました

SELECT * FROM lead_detail WHERE form_id = '1' and lead_id IN ($leadIds)

これは完全に機能します。

ただし、SECOND フィルターを追加する場合は、同じクエリで同じ列に対して 2 つのクエリを実行する必要があります。テーブル エイリアスまたはサブ セレクトと何らかの結合を行う必要があると考えていますが、その方法を思い出せません。

では、「鶏肉は好きですか」という質問に「はい」と答えた人と、「あなたの年齢は?」で「18 ~ 24 歳」と答えた人を知りたい場合、適切な $leadIds を取得するにはどうすればよいでしょうか?

の組み合わせのようなものになります。

SELECT lead_id FROM lead_detail WHERE field_number = '4' AND value = 'yes' AND form_id = '1'
AND
SELECT lead_id FROM lead_detail WHERE field_number = '5' AND value = '18-24' AND form_id = '1'
4

2 に答える 2

4

これには内部結合が機能します。

SELECT DISTINCT(ld1.lead_id)
FROM lead_detail ld1
INNER JOIN lead_detail ld2 ON (ld1.lead_id = ld2.lead_id)
WHERE ld1.field_number = '4' AND ld1.value = 'yes' AND ld1.form_id = '1' 
AND ld2.field_number = '5' AND ld2.value = '18-24' AND ld2.form_id = '1'

ただし、より適切な解決策がある可能性があります。

于 2013-01-31T19:38:26.213 に答える
0

使えませんでしたか

SELECT lead_id 
FROM lead_detail 
WHERE ((field_number = '4' AND value = 'yes') OR (field_number = '5' AND value = '18-24')) AND form_id = '1'
于 2013-01-31T19:51:31.833 に答える