33


12

MySQL-値が配列にある行を選択する方法は?

OK、通常は、配列値を知っていれば、次のようなことをすることを知っています:

SELECT * WHERE id IN (1,2,3)

しかし…​ 私は配列の値を知りません、私はただ「格納された」配列で見つけたい値を知っています:

SELECT * WHERE 3 IN (ids) // Where ids is stored as 1,2,3

これはうまくいきません。 これを行う別の方法はありますか?

4 Answer


63


FIND_IN_SET functionを使用します。

SELECT t.*
  FROM YOUR_TABLE t
 WHERE FIND_IN_SET(3, t.ids) > 0


17


クエリがSQLに到達するまでに、リストを既に展開している必要があります。 これを行う簡単な方法は、内部の信頼できるデータソースからIDを使用している場合、それらが整数であることを100%確信できる場合(たとえば、以前にデータベースから選択した場合)は、次のとおりです。

$sql = 'SELECT * WHERE id IN (' . implode(',', $ids) . ')';

ただし、ユーザーからのデータの場合、整数値のみを取得する必要があります。おそらく次のようになります。

$sql = 'SELECT * WHERE id IN (' . implode(',', array_map('intval', $ids)) . ')';


4


`FIND_IN_SET`関数を使用する場合:

`FIND_IN_SET(a、columnname)`は、 "a"を含むすべてのレコードを単独で、または他と一緒に生成します

AND

`FIND_IN_SET(columnname、a)`は、 "a"を含むレコードのみを生成し、他のレコードは含みません

したがって、record1が(a、b、c)であり、record2が(a)である場合

`FIND_IN_SET(columnname、a)`はrecord2のみを生成しますが、 `FIND_IN_SET(a、columnname)`は両方のレコードを生成します。


4


配列要素が整数でない場合は、次のようなものを使用できます。

$skus  = array('LDRES10','LDRES12','LDRES11');   //sample data

if(!empty($skus)){
    $sql = "SELECT * FROM `products` WHERE `prodCode` IN ('" . implode("','", $skus) . "') "
}