2012-01-11 40 views
2

在表tags中我有該字段id。在表tastings我有一個字段tags這是一個由逗號分隔的ID號列表,例如2,4,5。數據庫是MySQL。在另一列上使用LIKE

現在我試着統計每個標籤總共使用了多少次。但我堅持LIKE部分。我曾嘗試以下,都給人一種語法錯誤:

SELECT tags.id, tag, FROM tags, tastings WHERE tags LIKE tags.id + '%' 

SELECT tags.id, tag, FROM tags, tastings WHERE tags LIKE tags.id & '%' 

SELECT tags.id, tag, FROM tags, tastings WHERE tags LIKE CONCAT(tags.id, '%') 

我在做什麼錯?

+0

哪個DBMS?這可能很重要。 – 2012-01-11 08:22:34

+0

你試過這個嗎? SELECT tags.id,tag,FROM tags,tastings WHERE tags LIKE'%'+ tags.id +'%' – Baatar 2012-01-11 08:23:22

+0

我使用MySQL。是的,我已經嘗試過這些。 – Niels 2012-01-11 08:25:33

回答

7

如果您發佈了錯誤,但我在選擇列表後面有一個額外的逗號,那麼我會提供幫助。此外,您可能需要限定tags,因爲它既是表格也是列。

試試這個:

SELECT tags.id, tag 
FROM tags, tastings 
WHERE tastings.tags LIKE CONCAT('%', tags.id, '%') 

或更好,使用新的聯接語法:

SELECT tags.id, tag 
FROM tags 
JOIN tastings on tastings.tags LIKE CONCAT('%', tags.id, '%') 

注意在% tag.id的夾層,所以你在任何地方找到ID會。

警告:此連接將達到ID 4當標籤13,14,15(有一個在144),所以,除非你的IDS都是小於10,則需要重新考慮你的連接標準。

1

您還沒有指定您的DBMS,因此我正在猜測受支持的內容。

如何

SELECT tags.id, tastings.tag 
FROM tags 
    INNER JOIN tastings 
     ON tastings.tags like '%' + tags.id + '%' 

這應該工作(再次,這取決於你的DBMS),但你應該正常化您的數據,這種類型的東西真的是不會擴展/表現良好。

1

請嘗試以下查詢。

select t.id , count(t.id) from tag t , tastings tas where tas.tags like '%' ||t.id||'%' 
group by t.id;