2016-05-04 6 views
0

IN、US、CHをカンマ区切りの値の列に持つレコードを取得するためにデータベースにクエリーします。コンマ区切りのサブグループをカンマ区切りの値の列で見つけるのに最適なmysqlクエリーは何ですか

クエリ文字列:では、米国、EN

column values : IN,UST,EN,PC,US : Should match 
column values : XR,TX,LN  : Should not match 
column values : XH,IN,ST  : Should match 

が、私は各値のセットで見つけると条件は、クエリ文字列(IN、米国、EN)

を壊すmultileを使用しかし、私はいくつかの正規表現をしたいですmysql最適化クエリ。

+1

は、私はあなたのSQLクエリを提供すべきだと思いますかあなたが達成したいことをより良く知るためのサンプルコードe – Fiil

+0

['Find_in_set()'](http://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_find-in-set)関数の使用を検討してください。 – xQbert

答えて

1

私はあなたの投稿を理解しているかどうかはわかりませんが、ヒントに従うことであなたに役立つかもしれません。

私はここで、クエリのSQLでsqlfiddle

CREATE TABLE SO_TEST 
    (`id` int,`country_code` char(100)); 

INSERT INTO SO_TEST 
    (`id`, `country_code`) 
VALUES 
    (1, 'IN,UST,EN,PC,US'), 
    (2, 'XR,TX,LN'), 
    (3, 'XH,IN,ST'); 

でそれをチェックしました。

SELECT * FROM SO_TEST 
WHERE concat(concat(',',country_code),',') REGEXP (concat(concat(',',REPLACE('IN,US,EN', ',', ',|,')),',')) 

出力結果:バグのため

| id | country_code | 
+----+-----------------+ 
| 1 | IN,UST,EN,PC,US | 
| 3 | XH,IN,ST  | 

クエリSQL(sqlfiddle):

SELECT * FROM SO_TEST 
WHERE concat(concat(',',country_code),',') REGEXP (concat(concat(',',REPLACE('ST', ',', ',|,')),',')) 

出力結果:

| id | country_code | 
+----+-----------------+ 
| 3 | XH,IN,ST  | 
+0

バグ:USとSTはUSTと一致します。 –

+0

バグを捕まえるための@RickJamesのおかげです。私は私のポストを更新しました。 – Blank

関連する問題