[英]MySQL find row through another table
我有两张桌子:
游戏
`id` INT(11)
game_tags
`game` INT(11)
`tag_id` INT(11)
game_tags.game = game.id
我对MySQL很恐怖,所以这是我的问题:我希望能够找到哪些games
有一定数量的tag_id
。 所以,如果我有四个tag_id
( tag_id
),我希望能够通过查看game_tags
表找到哪些游戏将拥有所有这四个标签。 这是我的意思的一个例子:
伪MySQL的:
SELECT *
FROM `games`
WHERE (search through game_tags table and find which rows have the same `game` field and all of the tag_id's that I need to search for)
LIMIT 0, 15
我知道我解释了这个可怕的(不能在我的脑海里说出来),所以如果你有任何问题,请发表评论。
您可以使用group by
和having
子句以及Bassam的查询来确保您已找到给定游戏的所有四个ID。
select
game.*
from game
join game_tags on game.id = game_tags.game
where
tag_id in (3, 5, 7, 11)
group by
game.id
having
count(distinct tag_id) = 4;
请注意,这是因为having
子句在聚合count(distinct ...)
运行之后运行,而where
子句没有此信息。
SELECT games.*
FROM games
INNER JOIN
(SELECT game, COUNT(DISTINCT tag_id) AS gameCnt
FROM game_tags
WHERE tag_id in (3, 5, 7, 11)
GROUP BY game) t on games.id = game
WHERE gameCnt = 4
你可以做四个内连接,并添加四个条件喜欢
t1.tag_id = 1和t2.tag_id = 2和....
这给你你想要的。 但可能有更好的表现方式
是的,这是一个有趣的方法。 查询不好。 但也可以这样做。 纯娱乐!
SELECT game, BIT_OR(pow(2,tag_id)) AS tags
FROM game_tags
GROUP BY game
HAVING tags = pow(2,3) + pow(2,5) + pow(2,7) + pow(2,11);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.