2012-01-11 3 views
2

テーブルtagsには、フィールドidがあります。テーブルtastingsには、2,4,5のように、コンマで区切られたID番号のリストであるフィールドtagsがあります。データベースはMySQLです。別の列に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?それは重要かもしれない。 –

+0

これを試しましたか? SELECT tags.id、tag、FROM tags、tastings WHEREタグはLIKE '%' + tags.id + '%'です。 – Baatar

+0

私はMySQLを使用しています。そして、はい、私はそれらを試みました。 – Niels

答えて

7

エラーを通知しても、選択リストの後に余分なカンマがあると便利です。また、表と列の両方であるため、tagsを修飾する必要があります。あなたはどこにでもそれのidを見つける

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

%でtag.idの挟み込み:

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

またはより良い、新しい結合構文を使用します。

はこれを試してみてください。

警告:タグが13,14,15ているとき、あなたのIDが10より全て小さい場合を除き、あなたはあなたの参加基準を再考する必要がありますので、これは参加する、(144があります)ID 4をヒットします。

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; 
関連する問題