WHERE yan tümcesi bir dizi kullanarak PHP / MySQL

5 Cevap php

bir dizi verilen

$galleries = array
         (
           [0] => 1
           [1] => 2
           [2] => 5
         )

Ben onun WHERE yan tümcesi gibi dizinin değerlerini kullanan bir sql sorgu istiyorum:

SELECT *
FROM galleries
WHERE id = //values of array $galleries... eg. (1 || 2 || 5) //

Nasıl bu sorgu dizesi mysql ile kullanmak için oluşturabilir?

5 Cevap

ints:

$query = "SELECT * FROM `$table` WHERE `$column` IN(".implode(',',$array).")";

dizeleri:

$query = "SELECT * FROM `$table` WHERE `$column` IN('".implode("','",$array)."')";

Eğer düzgün önceden girişleri sterilize varsayarsak ...

$matches = implode(',', $galleries);

Sonra sadece sorgu ayarlayın:

SELECT *
FROM galleries
WHERE id IN ( $matches )

Alıntı değerleri uygun şekilde kümesi bağlı.

select id from galleries where id in (1, 2, 5);

Her loop için basit çalışacaktır.

EDIT: Flavius/AvatarKava's way iyidir, ama dizi değerlerin hiçbiri virgül içerdiğinden emin olun.

Özgün soru sayıları bir dizi ile ilgilidir ve ben dizeleri bir dizi kullanıyorum çünkü verilen örnekler işe gelemedi.

Ben her dize IN () fonksiyonu ile çalışmak için tek tırnak kapsüllü gereken bulundu.

İşte benim çözüm

foreach($status as $status_a) {
        $status_sql[] = '\''.$status_a.'\'';
    }
    $status = implode(',',$status_sql);

$sql = mysql_query("SELECT * FROM table WHERE id IN ($status)");

Gördüğünüz gibi ilk fonksiyon tek tırnak (\ ') her dizi değişkeni sarar ve sonra dizi implodes.

NOT: $ durum SQL deyimi tek tırnak yoktur.

Orada tırnak eklemek için güzel bir yoldur muhtemelen ama bu işleri.

Eğer var tablo texts (T_ID (int), T_TEXT (text)) ve tablo test (id (int), var (varchar(255))) olabilir

in insert into test values (1, '1,2,3') ;

T_ID IN (1,2,3) tablo metinlerden aşağıdaki irade çıktı satırlar

SELECT * FROM `texts` WHERE (SELECT FIND_IN_SET( T_ID, ( SELECT var FROM test WHERE id =1 ) ) AS tm) >0

Eğer ekstra bir tablo olmadan basit bir n2m db ilişkiyi yönetmek ve bize ihtiyaç PHP veya başka bir programlama dili olmadan, sadece SQL kullanarak bu şekilde.