选择*其中标记名称在联结表中

时间:2012-01-13 00:08:42

标签: mysql sql

我目前有一个查询选择人们正在观看视频的所有vid_id,并由大多数观众对其进行排序。每当有人观看视频时,都会在scrusersonline中创建一个条目,其中包含字段vid_id username timestamp

我还有一个tag_map表和一个标签表。 tag_map包含字段id tag_idvid_id,标记包含字段tag_idname。我只想修改下面的查询,以便只显示某个标签名称的所有vid_id结果。提前感谢您的任何专家帮助。

查询我正在尝试修改。 scrusersonline有字段vid_id时间戳用户名。它检索大多数用户查看的vid_ids,并按降序排序。我想进一步将这些结果限制为某个标签名称

    SELECT SQL_CALC_FOUND_ROWS scrusersonline.vid_id, COUNT(scrusersonline.id) 
AS idcount FROM scrusersonline 
    GROUP BY scrusersonline.vid_id ORDER BY idcount DESC

下面的查询是一个简单选择具有特定标记名称但与视频表链接的所有vid_id的示例。我希望能够更改上面的查询,以便它只显示标记名称的结果

SELECT SQL_CALC_FOUND_ROWS video.* FROM tag_map 
               INNER JOIN tags2 ON tags2.tag_id = tag_map.tag_id
INNER JOIN video ON video.vid_id = tag_map.vid_id
    WHERE name IN (?) 
    ORDER BY video.timestamp DESC LIMIT ?, ?

1 个答案:

答案 0 :(得分:1)

以下内容应该为您提供结果:

SELECT SQL_CALC_FOUND_ROWS a.vid_id, count(a.id) as idCount
FROM scruseronline as a
INNER JOIN tag_map as b
ON b.vid_id = a.vid_id
INNER JOIN tags2 as c
ON c.tag_id = b.tag_id
AND c.name IN (?)
GROUP BY a.vid_id
ORDER BY idCount DESC

哦,您可能希望从id中删除tag_map,因为其他字段的组合应该是唯一的,并且通常从不引用代理键。