IN BY MySQL SİPARİŞ ()

5 Cevap php

Ben ID numarası numaraları ile bir PHP dizi var. Bu rakamlar zaten sıralanır.

Şimdi ben kimlikleri tüm almak için IN () yöntemi, ile benim bir sonuç almak istiyorum.

Ancak, bu kimlikleri IN yönteminde gibi sipariş edilmelidir.

Örneğin:

IN(4,7,3,8,9)

Bir sonuç gibi vermelidir:

4 - Article 4  
7 - Article 7  
3 - Article 3  
8 - Article 8  
9 - Article 9

Herhangi bir öneriniz? Belki bunu yapmak için bir işlevi var?

Teşekkürler!

5 Cevap

Normalde bir dize işlevi olarak düşünülebilir ise, çok, sayılar için çalışıyor - Seni işlevi arıyor olabilir FIELD düşünüyorum!

ORDER BY FIELD(field_name, 3,2,5,7,8,1)

Sadece deyimi ile doğru sipariş vermek gerekir.

SELECT ID FROM myTable WHERE ID IN(1,2,3,4) ORDER BY ID

Neden veri sizin örnekteki gibi sırasız sipariş almak istersiniz?

Eğer uzun sorguları concatening sakıncası yoksa, bu şekilde deneyin:

SELECT ID FROM myTable WHERE ID=1
UNION
SELECT ID FROM myTable WHERE ID=3
UNION
SELECT ID FROM myTable WHERE ID=2

Standart SQL bunu yapmak için bir yol sağlamaz (MySQL olabilir, ama ben her zaman 'DBMS geçiş yapabilirsiniz ben satıcı-nötr çözümleri tercih).

Bu post-processing yapmanız gereken bir şeydir after sonuç kümesi döndürdü. SQL sadece madde "tarafından sırayla" (veya böyle bir hüküm varsa any sırayla) belirtilen bir düzen içinde dönebilirsiniz.

Diğer olasılık (ben bunu sevmiyorum ama, ben size seçim vermek için onur bağlı değilim) veritabanında, her kimlik için bir çoklu geziler yapmak, ve onlar gelmek gibi bunları işlemek için:

select * from tbl where article_id = 4;
// Process those.
select * from tbl where article_id = 7;
// Process those.
: : : : :
select * from tbl where article_id = 9;
// Process those.

Eğer kimlikleri ve sırasını bilmek ve her ID satırına karşılık gelen bu yana, kimlikler aracılığıyla döngü olabilir ve ayrı ayrı her ID DB sorgulamak. Ben bir sorgudaki tüm verileri almak denemek için daha popüler olduğunu biliyorum, ama bu bir döngü yapmak için daha basit ve yalındır olacaktır.

$id_array = array(4,7,3,8,9);

foreach ($id_array as $id) {
    $result_row = mysqli -> query("SELECT * FROM sometable WHERE ID = '$id');
    // Now output it to the user or add it to some larger array
}