1

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

  • vote_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 爱好者。任何帮助将不胜感激。

多谢你们!

4

1 回答 1

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 JOINto 选择没有匹配投票的项目(JOIN将它们排除在外,尝试它而不GROUP BY掌握差异)。然后我GROUP BY设计并可以数HAVING

请注意,由于该GROUP BY语句的加入,您将获得一个随机用户,因为有多个投票,因此每个设计有多个用户。所以我把它留了下来。你为什么需要它?(只要给我评论你想要做什么)

对于那些想知道photos的人,看看评论:

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

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

于 2013-05-28T17:41:58.173 回答