2011-11-16 9 views
0

タグの列でタグを正確に選択するにはどうすればよいですか?タグの列でタグを正確に選択する方法は?

page_id   tags 
1    tile-1,tile-12,tile-10 
2    tile-1,tile-10 
3    tile-12,tile-10 
4    tile-15,tile-16 

私は後だ結果がtile-1のみ、

page_id   tags 
1    tile-1,tile-12,tile-10 
2    tile-1,tile-10 

を持つページで、下記例えば

は、テーブル、クエリを使用して作成されたが、その後、私は私の検索を絞り込むにしたいですしかし、私が下で働いているクエリは、tile-12,tile-10などを返します。

SELECT* 
FROM (...) AS k 
WHERE k.tags LIKE '%tile-1%' 

LIKEを使用しないでください。

+0

誰かが下で答えたように、あなたのスキーマは本当に悪いです。それは完全に正規化されていません。今すぐ変更する方がいいです。プロジェクトをさらに進めれば、このようなスキーマはa $$の痛みになります。 –

答えて

1

私は、タグをpage_idのためにスキーマを変更することをお勧めします。あなたのデータは、この

1   tile-1 
1   tile-12 
1   tile-10 
2   tile-1 
2   tile-10 
3   tile-12 
3   tile-10 
4   tile-15 
4   tile-16 

のようになりますように、そして、あなたは、テーブルを検索する必要はありません。この方法で(テーブルスキャン)、単純なクエリで

SELECT * FROM table WHERE tag = 'title-1'; 

をすべてこれを行うことができます - これはテーブルに行が増えると問題になります(スケーラブルなソリューション)。 第2に、タグ列のインデックスを使用して、検索をすばやく行うことができます。

+0

この答えをありがとう! :-) – laukok

0

あなたは区切り文字としてコンマを使用しているので、あなたのLIKE -statementはカンマを含める必要があります:

SELECT * FROM table WHERE tags LIKE '%title-1,%'; 
+0

ああ、それは迅速な解決策です!ありがとう! :-) – laukok

+0

ああ待ってください。 'tile-10、tile-1'や' tile-1'のようなことは何ですか? – laukok

+0

申し訳ありませんが、私はあなたの質問を誤解しています。 tags-columnに 'title-1'だけが含まれていれば、あなたは' = 'inst 'of' LIKE'を使うべきであるように聞こえます...上記の表では、あなたは何も一致しません。後? – Fluff

関連する問題