2017-02-10 12 views
0

ここには、コマンドfind_in_setで実行されたクエリを示す私のスクリーンショットがあります。mysqlのfind_in_set()の実行

特定の行でのみ値のセットを実行します。単一のクエリでfind_in_setコマンドと一致するテーブル内のすべての値を実行したい。

が私のコードを見てみましょう:

select * from shirts; 
+----+--------------+------------------------------------+ 
| id | colors  | days        | 
+----+--------------+------------------------------------+ 
| 1 | 1,2,5,12,15 | monday, friday, thursday   | 
| 2 | 1,5,12,15,30 | tuesday,monday      | 
| 3 | 2,5,11,15,28 | monday, friday,wednesday ,thursday | 
| 4 | 1,2,7,12,15 | tuesday,monday      | 
| 5 | 2,4,8,12,15 | tuesday,monday      | 
+----+--------------+------------------------------------+ 
5 rows in set (0.00 sec) 

mysql> select * from shirts where find_in_set('5',colors) or find_in_set('30',colors) or find_in_set('30', colors) and find_in_set('monday',days) or find_in_set('tuesday',days); 
+----+--------------+------------------------------------+ 
| id | colors  | days        | 
+----+--------------+------------------------------------+ 
| 1 | 1,2,5,12,15 | monday, friday, thursday   | 
| 2 | 1,5,12,15,30 | tuesday,monday      | 
| 3 | 2,5,11,15,28 | monday, friday,wednesday ,thursday | 
| 4 | 1,2,7,12,15 | tuesday,monday      | 
| 5 | 2,4,8,12,15 | tuesday,monday      | 
+----+--------------+------------------------------------+ 
5 rows in set (0.00 sec) 

mysql> select * from shirts where find_in_set('5',colors) or find_in_set('30',colors) and find_in_set('monday',days) or find_in_set('tuesday',days); 
+----+--------------+------------------------------------+ 
| id | colors  | days        | 
+----+--------------+------------------------------------+ 
| 1 | 1,2,5,12,15 | monday, friday, thursday   | 
| 2 | 1,5,12,15,30 | tuesday,monday      | 
| 3 | 2,5,11,15,28 | monday, friday,wednesday ,thursday | 
| 4 | 1,2,7,12,15 | tuesday,monday      | 
| 5 | 2,4,8,12,15 | tuesday,monday      | 
+----+--------------+------------------------------------+ 
5 rows in set (0.00 sec) 

私はmonday , friday530を選びましたが、それは唯一の13行を表示します。

誰でも問題を解決できますか?

+5

あなたのスクリーンショットはどこですか? – fizzi

+0

改良された書式設定、固定文法、追加されたタグ –

答えて

0

ブール代数では、ANDORよりも厳密にバインドされています。

default order of precedence of these operatorsがあります。

次のように記述すると、この:

あなたはこのように括弧を使用していたかのようにそれはいつもだ
select * from shirts where A or B and C or D 

select * from shirts where A or (B and C) or D 

しかし、あなたはそれがこのように行動したい:

select * from shirts where (A or B) and (C or D) 

したがって、明示的なカッコでクエリを記述して、優先順位の既定の優先順位を変更する必要があります。ANDOR

問題はfind_in_set()を使用することとは関係ありません。ブール代数の間違いです。