SQL Query获取在另一个表中具有X个计数的元素的ID

时间:2013-05-28 17:38:09

标签: mysql sql

我想知道你是否可以帮我一个SQL查询。 我有两张桌子:设计和投票。 设计有来自用户的投票,因此投票表的结构如下所示:

  • vote_id
  • USER_ID
  • design_id

我需要的是在网页上显示所有少于50张选票的设计,但我正在努力解决这个问题...你能帮我一个忙吗?

我正在尝试这样的事情,它确实以低于50票的价格返回设计,但它不包括没有投票的设计。

    SELECT * FROM `votes` as Vote, `designs` as Design, `users` as User
WHERE `Design`.`id` = `Vote`.`design_id`
GROUP BY `Vote`.`design_id`
HAVING COUNT(*) > 50;

毋庸置疑,我在SQL中是一个完全的业余爱好者。 任何帮助将不胜感激。

谢谢你们!

1 个答案:

答案 0 :(得分:2)

SELECT designs.*, photo.* /* You only need designs */
FROM designs /* You are looking for designs, so start there */
JOIN photos ON designs.id = photos.design_id /* append the matching photo */
LEFT JOIN votes ON designs.id = votes.design_id /* append all votes */
GROUP BY designs.id /* group all rows by design */
HAVING COUNT(*) > 50;

我在这里做的是:我选择所有设计并附加匹配的照片(JOIN,因为总有一个)。接下来我选择所有匹配的投票。您必须使用LEFT JOIN来选择没有匹配投票的项目(JOIN会将其删除,尝试不使用GROUP BY来掌握差异)。然后我GROUP BY设计并可以按HAVING计算。

请注意,由于GROUP BY语句而导致的此连接会让您成为随机用户,因为每个设计有多个投票,因此有多个用户。所以我把它留了出来。你为什么需要它? (请留下我对你要做的事情的评论)

对于那些对photos感到疑惑的人,请看一下评论:

  

每个设计都有一张照片,每个投票都来自用户。所以表   照片有“desing_id”,Desing有“photo_id”。然后投票了   “user_id”和Design有“vote_id”

要了解有关联接的更多信息: