簡體   English   中英

mysql查詢按標簽選擇

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM