mysql查询按标签选择

时间:2012-07-01 13:25:44

标签: mysql select

我有一个包含3个内容表的数据库,我需要根据标签查询获取内容。

表格如下:

nv_entries:
id - title - year - etc..

nv_tags:
id - entrieid - tag

nv_images:
id - entrieid - source

假设我想要所有带有“rousseau”标签和“fuzz”的条目。 之后,图像应该连接到entrieid = entrieid。

这可以通过一个查询完成,但我不知道如何。

$query = "SELECT * from nv_entries WHERE ???

请帮助

2 个答案:

答案 0 :(得分:1)

由于条目和标记之间存在一对多关系,因此必须在标记表上使用数据透视表。简单地说tag ='x“和tag ='y”的位置不起作用,因为引擎会逐行查看,因此标签不能同时具有这两个值。所以基本上你转动,为每个条目分配标志,说明该条目是否被认为具有你正在寻找的标签值。

SELECT * 
FROM nv_entries entries 
JOIN (
    SELECT entrieid, 
           COUNT(CASE WHEN (tag = 'rousseau') THEN 1 ELSE null END) has_rousseau,
           COUNT(CASE WHEN (tag = 'fuzz') THEN 1 ELSE null END) has_fuzz
    FROM nv_tags
    GROUP BY entrieid
    HAVING has_rousseau != 0 and has_fuzz != 0
    ) tags ON (entries.id = tags.entrieid)
JOIN nv_images images ON (tags.entrieid = images.entrieid);

答案 1 :(得分:0)

SELECT * FROM
nv_entries entries
INNER JOIN nv_tags tags ON  tags.entrieid = entries.id
INNER JOIN nv_images imgs ON imgs.entrieid = entries.id
WHERE tags.tag IN('rousseau','fuzz')

但这将从三个表中提取所有数据。 指定相对于表的标记,以避免冗余标记为entrieid。