私は問題があります。IN
両側に複数の値がある場合に (クエリで) ステートメントを使用する方法を知りたい- 私はクエリを書いています:
SELECT name FROM math_Details WHERE cric_ids in (1,2,3,4,8);
このクエリの問題はcric_ids
列にあり、(, コンマ) で区切られた複数の値もあります。お気に入り(5,9,1,10,2)
私を助けてください?
MySQL の関数を繰り返し使用できます。FIND_IN_SET()
SELECT name
FROM math_Details
WHERE FIND_IN_SET(1, cric_ids) OR FIND_IN_SET(2, cric_ids)
OR FIND_IN_SET(3, cric_ids) OR FIND_IN_SET(4, cric_ids)
OR FIND_IN_SET(8, cric_ids)
このようなステートメントは、PHP で動的に構築できます。たとえば、PDOで準備済みステートメントを使用すると、次のようになります。
$set = [1,2,3,4,8];
$sql = 'SELECT name FROM math_Details WHERE FALSE'
. str_repeat(' OR FIND_IN_SET(?, cric_ids)', count($set));
$qry = $dbh->prepare($sql);
$qry->execute($set)
ただし、他の人が言ったように、これはデータベース設計が不十分であることを示しています。データ構造を正規化cric_ids
して、フィールドの代わりに、レコードmath_Details
をそれぞれに関連付けるテーブルを作成することを検討する必要がありますcric
。
ああ、あなたのデザインはめちゃくちゃなので、あなたが求めていることはほとんど不可能です。私が理解しているのは、あなたが持っているということです:
Select name from math_Details where cric_ids in (1,2,3,4,8);
列は次のようになります。
| cric_ids |
-------------
|1,2,3,5,4 |
|5,8,6,12,3|
|78,6,2,4,6|
|5,7,8,9,1 |
数字で検索できるようにしたい....
結果は文字列またはvarcharであるため、好きなものは役に立ちません。したがって、可能なオプションは次のとおりです(各オプションに「好き」を使用する必要があることに加えて)
critics like '1' //wont work at least you only have 1 in your cric_ids
critics like '%1' // will work only if 1 is the last value
critics like '1%' //will work only if 1 is the first vaue
critics like '%1%' // will give you all values with 1, like 1, 10, 11, 111, 19, etc...
2つの選択肢があると思います、
データベースエンティティ関係モデルと正規化をご覧ください。