6

这会更好地显示在我的示例中:

我有一张桌子,其中存储了一张大表格的用户答案。每个表格有 139 个问题。这些问题存储在不同的表中,在需要时与 questionID 连接。每个用户都有一个 ID。我现在需要制作过滤器,以仅显示与特定问题的一个或多个答案匹配的用户。

例如,我想要用户,其中问题 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"

结果我只希望返回用户 ID 3,因为它满足所有条件。

使用 ColdFusion 很容易实现这一点,因为它允许在查询结果中进行查询,但在 PHP 中我还没有找到任何方法。有机会添加随机数量的问题很重要,而不仅仅是本例中的三个。

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 回答