繁体   English   中英

SQL查询以获取另一个表中具有X个计数的元素的ID

[英]SQL Query to get IDs of elements that have X number of counts in another table

我想知道您是否可以使用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的完全业余爱好者。任何帮助将不胜感激。

多谢你们!

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语句而导致的这种GROUP BY将为您带来随机用户,因为有数票,因此每个设计有数个用户。 所以我省去了。 你为什么需要它? (就您想做的事给我留言)

对于那些想知道photos ,请看一下评论:

每个设计都有一张照片,每个投票都来自用户。 因此,表中的照片具有“ desing_id”,而Desing具有“ photo_id”。 然后投票为“ user_id”,而设计为“ vote_id”

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM