1

我有一个包含 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 ???

请帮忙

4

2 回答 2

1

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

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);
于 2012-07-01T13:56:07.640 回答
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。

于 2012-07-01T13:30:44.483 回答