它可能爲時已晚,但如果可能的話,而不是在形式使用另一臺爲您的標籤:
product_id | tag
1 | black
1 | tray
2 | tray
2 | black
3 | black
3 | tray
3 | layer
這將允許您查找,當一個或多個標籤使用本的任何產品:
SELECT DISTINCT products.*
FROM products LEFT JOIN tags ON tags.product_id = products.id
WHERE tags.tag IN ('black', 'red', 'light')
編輯
如果你希望所有的標籤是存在,你必須發出X查詢X標籤使用這個搜索:
SELECT *
FROM
(SELECT DISTINCT products.*
FROM products LEFT JOIN tags ON tags.product_id = products.id
WHERE tags.tag = 'black') AS set_a
INNER JOIN
(SELECT DISTINCT products.*
FROM products LEFT JOIN tags ON tags.product_id = products.id
WHERE tags.tag ='red') AS set_b ON set_a.product_id = set_b.product_id
INNER JOIN
(SELECT DISTINCT products.*
FROM products LEFT JOIN tags ON tags.product_id = products.id
WHERE tags.tag = 'light') AS set_c ON set_b.product_id = set_c.product_id
這將與找到的所有記錄相交,並且只留下潛在記錄。請注意,這是一個非常沉重的請求,我不知道INTERSECT關鍵字是否在MySQL中實現,這將是一個更好的方法,我敢肯定!
啊哈,黑暗的一個正則表達式的rts – Strawberry