6

これは私の例で示す方が良いでしょう:

1 つの大きなフォームからのユーザーの回答が保存されているテーブルがあります。各フォームには 139 の質問があります。これらの質問は別のテーブルに保存され、必要に応じて questionID と結合されます。ユーザーごとに ID があります。特定の質問に対する 1 つ以上の回答に一致するユーザーのみを表示するために、フィルターを作成する必要があります

たとえば、質問 14 の回答が「はい」で、質問 54 が空ではなく、質問 100 が 10 よりも大きいユーザーが必要です。表は次のようになります。

**userID** | **questionID** | **answer**

1            14               "yes"
1            54               "something"
1            100              "9"
2            14               "no"
2            54               "north
2            100              "50"
3            14               "yes"
3            54               "test"
3            100              "12"

結果として、すべての条件を満たしているため、 userID 3 のみが返されるようにします。

これは、ColdFusion を使用すると簡単に到達できます。これは、クエリ結果でクエリを実行できるためですが、PHP では方法が見つかりませんでした。この例のように 3 つだけではなく、ランダムな数の質問を追加する機会を持つことが重要です。

4

3 に答える 3

9

試す、

SELECT userID
FROM tableName
WHERE   (questionID = 14 AND
        answer = 'yes' ) OR
        (questionID = 54 AND
        answer <> 'empty') OR
        (questionid = 100 AND
        answer > 10)
GROUP BY userID
HAVING COUNT(*) = 3

SQLFiddleデモ

于 2012-09-21T07:33:26.997 に答える
4
SELECT q.userID
  FROM questions q
  JOIN questions qq ON qq.userID=q.userID
       AND qq.questionID='54' AND qq.answer IS NOT NULL
  JOIN questions qqq ON qqq.userID=q.userID
       AND qqq.questionID='100' AND qqq.answer > 10
 WHERE q.questionID=14
   AND q.answer = 'yes'
于 2012-09-21T07:35:51.207 に答える
1

あなたが試すことができます :

SELECT questionID, answer
FROM table
WHERE ( questionID = 14 AND answer = 'yes' ) 
OR ( questionID = 54 AND answer != '' )
OR ( questionID = 100 AND answer > 10 ); 
于 2012-09-21T07:35:11.543 に答える