![](/img/trans.png)
[英]Sql Query to get an item that contains multiple ids from another table
[英]SQL Query to get IDs of elements that have X number of counts in another table
我想知道您是否可以使用SQL查询。 我有两个表:设计和投票。 设计获得了用户的投票,因此Votes表的结构如下所示:
我需要的是在网页上显示所有少于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.