2012-04-29 5 views
0

2つの部分からなるクエリが必要です。 私は2つのwhere節を意味します。mysqlのCSV列の値とより多くのチェックを比較する

今まで私は以下に達しましたが、正しく動作しません。

SELECT * from items 
where 
     FIND_IN_SET('3', category_id) 
    AND postcode LIKE 'sw19%' 
order by id 

このクエリでは、最初の部分、つまりFIND_IN_SET()部分のみが実行されます。 2番目の部分、つまり郵便番号のチェックを無視します。

私は知りたいのは、この種のクエリの解決策です。

DETAILS

私は2列の値を比較したい:

  • 1列例えば、CSVの列です。 1,2,3,4,5

  • 他の表は次のようである郵便番号B17 SW19等

あります。

 
---+------+-------------+----------+- 
id | item | category_id | postcode | 
---+------+-------------+----------+- 
1 | abc | 1,2,3,4  | SW19  | 
---+------+-------------+----------+- 
2 | def | 3,4,5  | NW6  | 
---+------+-------------+----------+- 
3 | xyz | 6,7,8,9  | SW19  | 
---+------+-------------+----------+- 
4 | ghi | 8,9,10,11 | SW19  | 
---+------+-------------+----------+- 

など

私はそのcategory_id'3'が含まれているエントリを選択したい場合は、その郵便番号'SW'から始まり、それがどのようなクエリになりますか?

+1

しかし、あなたの既存のSQLはうまく動作します( 'id = 2'、' postcode = 'NW6''を返します)! [my sqlfiddle](http://sqlfiddle.com/#!2/530df/1)を参照してください – eggyal

答えて

1

のためだけの単純なクエリ私は完全に私の問題を解決し、それが将来的に誰かを助けるかの解決策を見つけました。

Select * from table_name where FIND_IN_SET('3', category_id) >0 AND postcode LIKE 'sw%' 

よろしく、 Shoaib:

まあ、クエリは次のようになります。

+0

あなたの質問にはどういう違いがありますか? – eggyal

+0

FIND_IN_SET( '3'、category_id)> 0 –

0

:)この

SELECT * FROM tablename1 WHERE category_id LIKE '%,3,%' AND postcode LIKE 'SW%' 
+0

答えるために@Shahidありがとう、このクエリは面白い結果を与えています。 csvカラムに '3'がなく、postcode句が削除されたかヌル/空に設定されているエントリがさらにある場合、csvカラムに '3'があるかどうかに関わらず、すべてのレコードを返します。彼らの解決策はありますか? –

+0

投稿を更新しました。今すぐチェックしてください – Shahid

関連する問題