MySql kullanarak belli bir düzen içinde verileri alma

5 Cevap php

Ben bir veritabanından veri alan bir PHP uygulaması yazmakla meşgul değilim, ama belirli bir sırayla veri almak gerekiyor.

Şöyle Benim Sorgu görünüyor

$sql = "select id,title,type from campaigns where id=$cid order by type";

Şimdi benim sorunum bu farklı tiplerin 'GC', 'MJ', 'MU', 'MS', 'MW', 'MX', 'GS' vardır ve ben MX her zaman olmalıdır, böylece seçeneğini son olmak istiyorum satırın sonunda. Yani diğerleri sonra MX seçilecek ve ilk olarak shpould. Bu mantıklı umuyoruz.

5 Cevap

Böyle sıralayabilirsiniz:

ORDER BY IF (type = 'MX', 1, 0), type

Eğer sorgu ile kaç satır seçiyoruz? (Ben ... bu kimliği benzersiz sandığım) yani sıralama düzeni hiçbir etkisi yoktur sadece birine benziyor.

Apart sıralama düzeni çünkü alfabetik yapmak gerekiyordu ne yapmalıyım bundan, MX listesinde son olacak.

Diğerleri SQL yöntemleri attılar. Ayrıca php ile bu etiketlendi beri, ben de sıralama algoritması tarafından kullanılmak üzere özel bir karşılaştırma işlevini tanımlamak için usort işlevini kullanabilirsiniz işaret edeceğiz.

 // returns 1 if lhs > rhs, returns 0 if lhs == rhs, returns -1 if lhs <rhs
 function customCompare($lhsRow, $rhsRow)
 {
     $lhsType = $lhsRow['type']
     $rhsType = $lhsRow['type']
     // special case code so that 'MX' is always > then anything (except for another MX)
     if ($lhsType == 'MX')
     {
          if ($rhsType == 'MX')
          {
               return 0;
          }
          else
          {
               return 1;
          }
     }

     // return 1 if lhs > rhs
     if ($lhsType > $rhsType)
     {
         return 1;
     }
     else if ($rhsType < $lhsType)
     {
         return -1;
     }
     else
     {
         return 0;
     }
 }

 $rows = /*perform query without ORDER*/
 usort($rows, "customCompare");

kullanmak isteyebilirsiniz UNION

SELECT id, title, type
FROM campaigns
WHERE id={$cid}
AND type != 'MX'
ORDER BY type

UNION

SELECT id, title, type
FROM campaigns
WHERE id={$cid}
AND type == 'MX'

ve bir sorgu olarak çalıştırın.

...
order by case when type = 'MX' then 1 else 0 end, type

diğer veritabanlarına taşınabilir olacaktır (örn. postgresql)