嗨:我需要一种方法来限制使用SUM或COUNT的查询结果,就像使用limit一样。这可能吗?我有一张问答表。如果问题,每个条目标识为“0”,如果响应,则标识为“1”。每个答案都有questionID,所以我可以通过这个字段来订购。我想用他的所有答案显示前20个问题而不使用限制,因为使用LIMIT 0,20将显示前20个条目,无论它们是问题还是答案。
我希望看到这样的逻辑:
SELECT *, SUM(IF(level = '0', 1,0)) AS MyCount FROM table
WHERE MyCount<20 ORDER BY questionID,timestamp
我怎么能做到这一点?任何建议都表示赞赏。
答案 0 :(得分:2)
由于您正在执行GROUP函数(求和),请尝试使用HAVING而不是WHERE:
SELECT *, SUM(IF(level = '0 ', 1,0)) AS MyCount
FROM table
HAVING MyCount < 20
ORDER BY
questionID,timestamp
- 编辑 -
因为您在同一个表中存储了两种不同类型的数据(响应和问题),所以您可以尝试自我加入(未经测试):
SELECT
question.id AS question_id,
question.name AS question_name,
response.id AS response_id,
response.name AS response_name
FROM
table AS question
JOIN
table as response
ON
question.id AND response.level = 1
WHERE
question.level = 0;
答案 1 :(得分:1)
这听起来像一个设计糟糕的架构。将您的问题放在一个表格中,将答案放在另一个表格中,将问题ID作为答案表上的外键。把它们放在同一张桌子里就是你现在遇到这个问题的原因!