[英]mysql query select by tag
我有一個包含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 ???
請幫忙
由於條目和標簽之間存在一對多關系,因此必須在標簽表上使用數據透視表。 只是簡單地說出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);
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')
但這將從三個表中提取所有數據。 指定相對於表的標簽,以避免多余的標簽作為實體。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.