這裏長時間潛伏着,一直在使用這個網站的建議多年,現在我有一個問題,我找不到答案 - 米確定解決方案很簡單,但!PHP MYSQL查詢,使用多個表中的數據搜索多個字段/列
我正在爲音樂曲目建立一個標記系統。我有三個表
曲目
---------------
| id | name |
---------------
| 1 | Track1 |
| 2 | Track2 |
---------------
Taglinks
--------------------------
| id | tag_id | track_id |
--------------------------
| 1 | 1 | 1 |
| 2 | 2 | 1 |
| 3 | 2 | 2 |
--------------------------
標籤
-------------------------
| id | tag | type |
-------------------------
| 1 | acoustic | genre |
| 2 | anger | mood |
-------------------------
我想能夠獲得具有例如標籤的音軌的軌道名稱:聲音,類型:流派和標籤:憤怒,類型:心情。所以在這種情況下,我想跟蹤1,因爲這有兩個標籤。
當前查詢我是
SELECT tracks.name
FROM tracks
JOIN taglinks ON tracks.id=taglinks.track_id
JOIN tags ON (tags.type='genre' AND tags.tag='acoustic') AND (tags.type='mood' AND tags.tag='anger')
WHERE taglinks.tag_id=tags.id;
這將返回什麼,如果我刪除了的和部分第二JOIN然後我得到預期的所有曲目標記的聲音,如果我將其更改爲OR我得到這兩個軌道,如預期一樣。
我該如何做一個AND,然後只返回那些同時具有這些標籤和類型的曲目?
在此先感謝:d
編輯:
只是爲了澄清我追求的。我希望能夠檢索既有Acoustic又有Anger作爲標籤的曲目,但只有當這些標籤也符合給定類型時纔可以。
這是因爲後來我可能會有一個名爲jazz的類型爲genre的標記,以及一個名爲jazz的標記爲type style,我需要能夠確保通過正確類型的標記以及標記本身。
以下是我正在使用的sqlfiddle的鏈接 - http://sqlfiddle.com/#!2/aad82/3。
Gilles的答案似乎是一個很好的解決方案!
@samsamX - 我會upvote編輯,如果我可以:) – webnoob
我很高興與編輯,你是如何佈置這樣的表? –