Iki sütunla MySQL sorgusu sıralamak için nasıl

4 Cevap php

Aşağıdaki benim DB veri nedir, nasıl PHP / MySQL ile SID ve prev_sid bunu sıralama olabilir!?

sid prev_sid    type
000 197         app_home    
197 198         page_teach  
198 218         page_teach  
199 211         page_step   
211 207         link        
218 559         page_step   
559 199         page_step

Sonuç:

sid prev_sid    type
000 197         app_home
197 198         page_teach
198 218         page_teach
218 559         page_step
559 199         page_step
199 211         page_step
211 207         link

000 -> 197 -> 198 -> 218 -> 559 -> 199 -> 199 -> 211 -> 207

4 Cevap

Ben size tablo tasarımını yeniden öneririm. Veri gösterimi Bu tür uygun ve verimli kriteri olmaktan satırları engeller.

Eğer geçerli tablo tasarım tutmak gerekiyorsa, ben SQL değişkenleri dahil etmek gerekir, ve sıralama seçme oldukça dağınık ve muhtemelen verimli olmadığı olur şüpheli.

Başka, muhtemelen daha iyi bir çözüm, kolayca prev_sid ve türü değerleri çiftleri bir karma-harita, haritalama sid-değerleri kullanılarak lineer zamanda yapılabilir bu noktada, uygulama tarafında sıralama yapmak olacaktır.

Veri (yani sed ve bir özyinelemeli ebeveyn-çocuk ilişkisini tanımlamak prev_sid) bir komşuluk listesi gibi görünüyor. Bu durumda, daha sonra sırayla ürün almak için her düğümün sol değerine göre sıralama iç içe bir dizi dönüştürmek ve olabilir sırayla ürün almak için. Hiyerarşik veri hakkında daha fazla bilgi için Managing Hierarchical Data in MySQL bakın.

BTW, PHP benim cevap kontrol kullanarak iç içe geçmiş bir dizi bir komşuluk listesini dönüştürmek istiyorsanız PHP Moving mySQL Tree Node.

Eğer veri dikkatle bakarsanız, size sadece sid göre sıralamak gerektiğini göreceksiniz. Bu sorgu için ORDER BY sid ekleyerek SQL yapılır.

SELECT sid, prev_sid, type FROM table ORDER BY sid

Eğer (burada durum değil ama yararlı olabilir) iki sütun sıralamak gerekirse, ORDER BY parametre olarak sütunların listesini alabilir.

SELECT sid, prev_sid, type FROM table ORDER BY sid, prev_sid

218> 559> 199

Ben hiç öyle değil kullanmış olduğunuz herhangi bir numaralandırma sistemini kullanarak değil. Ben çok iyi sorununuzu açıkladı sanmıyorum.

Örneğin baktığımızda ben sid için değeri veya perv_sid için değeri, hangi bağlı olarak daha az, yani ya dayalı sıralamak istiyorum şüpheli:

SİPARİŞ AZ BY (sid, prev_sid)

C.