2012-01-29 126 views
0

我有以下问题。一个视频有多个标签,如高清晰度,720p,1080p等,每个标签都有自己的记录。所有的标签都在它自己的表中它的命名标签。MYSQL喜欢搜索2表

下面是示例表格标签。

CREATE TABLE IF NOT EXISTS `tag` (
    `video_tag_id` bigint(20) NOT NULL AUTO_INCREMENT, 
    `video_id` bigint(20) DEFAULT NULL, 
    `tag_name` varchar(300) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL DEFAULT '', 
    `tag_count` bigint(20) DEFAULT NULL, 
    PRIMARY KEY (`video_tag_id`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; 

因此,当我使用从另一个表中搜索这样的内容时,它会为每个标记显示同一个视频。

我怎么能做到这一点?

+1

你'tag'不是一个数据库,它是一个表。 – 2012-01-29 13:56:44

+0

感谢我的错误 – 2012-01-29 13:58:57

回答

1

我们假设你的意思,你指的数据库

您将需要替换正确的表结构的视频表:

SELECT 
    videos.video_id, 
    videos.name, 
    tag.tag_name 
FROM videos JOIN tag ON videos.video_id = tag.video_id 
WHERE videos.name LIKE '%the name of your video%' 

上面会列出一排的视频有每个标签。

要在一个行返回的标签列表,使用GROUP_CONCAT()

SELECT 
    videos.video_id, 
    videos.name, 
    GROUP_CONCAT(tag.tag_name) AS tags 
FROM videos JOIN tag ON videos.video_id = tag.video_id 
WHERE videos.name LIKE '%the name of your video%' 
GROUP BY videos.video_id, videos.video_name 
+0

我会尽力感谢 – 2012-01-29 14:13:11

+0

你有没有正确的编码?表格标签不存在! – 2012-01-29 15:27:18

+0

@SaschaHeim再试一次。应该是'tag'而不是'tags' – 2012-01-29 15:44:54