無法理解如何通過第二個表中的標記信息來過濾圖像表。簡單的MySQL加入
所以我必須與所有的基礎領域的圖像表:
id |
title |
userid |
timestamp |
status
,我有一個標籤表:
id |
imageid |
text (contains a single tag)
我希望做的是簡單的:採取名單的標籤並獲取列表中包含所有標籤的圖像列表。我無法把頭圍住它。
任何幫助非常感謝,謝謝!
無法理解如何通過第二個表中的標記信息來過濾圖像表。簡單的MySQL加入
所以我必須與所有的基礎領域的圖像表:
id |
title |
userid |
timestamp |
status
,我有一個標籤表:
id |
imageid |
text (contains a single tag)
我希望做的是簡單的:採取名單的標籤並獲取列表中包含所有標籤的圖像列表。我無法把頭圍住它。
任何幫助非常感謝,謝謝!
SELECT
a.*
FROM
images a
INNER JOIN
tags b ON a.id = b.imageid
WHERE
b.text IN ('tag1', 'tag2', 'tag3')
GROUP BY
a.id
HAVING
COUNT(*) = 3
'tag1', 'tag2', 'tag3'
是您輸入標籤的列表 HAVING
子句中的3
是標籤列表中標籤計數的輸入。
假設您沒有每個imageid
的重複標籤,您可以加入一個查詢,對每個標籤的標籤進行計數,將帶有IN()
子句的標籤限制爲您要搜索的列表。
然後用HAVING
條款,拒絕其計數不等於在列表的標籤數量的項目(那些具有較完整列表更少):
SELECT
images.*
FROM
images
JOIN (
SELECT
imageid,
COUNT(*) AS numtags
/* could also be COUNT(DISTINCT text) */
FROM tags
/* Put only the tags you want into an IN() clause */
WHERE text IN ('tag1,'tag2','tag3')
GROUP BY imageid
/* If an image has all 3 tags, COUNT(*) = 3 */
HAVING numtags = 3
) tlist ON images.id = tlist.imageid