2013-07-22 14 views
5

私のデータベースには、 "tags"という名前のフィールドがあります。 iOS、Android、Java、JavaScriptなど。この表の項目をすべて選択したい場合は、いくつかのタグに一致するものを選択します。MySQL "like"(偽陽性)

id |名前|タグ

- | ------- | -----

1 |名前1 | iOS、Android

2 |名前2 | JavaScript、CSS

3 |名前3 |あなたが想像として

SELECT * FROM posts WHERE tags LIKE '%Java%'; 

しかし、私は、タグのJava '(ID = 3で一つだけ)を持っている項目だけをしたい場合はHTML、Javaの

は、私はこれを行いますそれは私に2番目の(JavaScript)と3番目の(Java)アイテムを返します。

私はどのようにして3番目のものを返すことができますか?あなたもlikeでこれを行うことができ、MySQLと他のデータベースで

SELECT * 
FROM posts 
WHERE find_in_set('Java', tags) > 0; 

、しかし、あなたはすべての周りに区切り文字を配置する必要があります:

+2

'SELECT * FROM posts WHEREタグ '%Java';' –

+2

多対多の関係のためのGoogle – zerkms

+0

代わりにリレーションテーブルを使用し、 'LIKE'節を賢明にしてください。 – Raptor

答えて

14

MySQLでは、最善の解決策は、find_in_set()ある

SELECT * 
FROM posts 
WHERE concat(',', tags, ',') like '%,Java,%'; 

区切り文字は、同様のタグとの混乱を防止します(まあ、カンマを伴わない混乱)。

+0

'%、Java、%'; 'のように' LIKE '%Java%'; 'と' concat( '、'、tags、 '、')の違いを正確に知りたいだけです。ありがとうございました。 –

+2

@ChristianMark。 。 。最初は '' Javascript''にマッチします。 2番目はできません。 –

関連する問題