【问题标题】:SELECT multiple rows WHERE matching two conditionsSELECT 多行 WHERE 匹配两个条件
【发布时间】:2012-09-13 14:38:15
【问题描述】:

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

我有一张表格,其中存储了用户从一张大表格中获得的答案。每个表格有 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"

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

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

【问题讨论】:

  • 你的表架构是什么? (SHOW CREATE TABLE your_table的结果)
  • 创建表leal_dotaznik (ID int(11) NOT NULL auto_increment, UID int(11) NOT NULL, questionID int(11) NOT NULL, answer text NOT NULL,主键 (ID) ) ENGINE=MyISAM AUTO_INCREMENT=3059 DEFAULT CHARSET=utf8

标签: php mysql sql


【解决方案1】:

试试,

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 Demo

【讨论】:

  • 你是怎么猜到OP的表结构的?
  • @Jocelyn 看到上面的问题,有一个表:)
  • 我看到一条文字说明“这些问题存储在不同的表中,需要时通过 questionID 加入”。
  • 谢谢,这解决了问题。我认为这个解决方案比 Matei Mihai 的解决方案更干净,并且根据查询时间也快一点。但是谢谢你们俩的快速回答:)
  • 是的,没有加入,但解决起来很棘手。我喜欢 HAVING COUNT(*) = 3。所以 +1
【解决方案2】:

你可以试试:

SELECT questionID, answer
FROM table
WHERE ( questionID = 14 AND answer = 'yes' ) 
OR ( questionID = 54 AND answer != '' )
OR ( questionID = 100 AND answer > 10 ); 

【讨论】:

  • 您已通过 userID = 3 对结果用户进行硬编码。顺便说一下,这是一个示例
  • 谢谢,但无论如何我认为@Matei Mihai 有正确的答案。他想要同时满足所有条件,而不是至少一个。
  • 这不会满足所有条件,只会满足其中一个条件。
【解决方案3】:
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'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-16
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    相关资源
    最近更新 更多