2011-05-12 17 views
5

Belirtilen renkler içeren bir çiçek tablom var. Bir çiçek listesi almak ve önce Yellow, sonra Blue, sonra Red ile sipariş vermek mümkün mü? Temel olarak, bir değer listesi belirtmek ve sonucu bu değerlere göre sıralamak istiyorum. Mümkün? sıralama ihtiyacına göreMySQL - ASC veya DESC olmayan bir şeyle sipariş verme

ORDER BY CASE column 
      WHEN 'Yellow' THEN 1 
      WHEN 'Blue' THEN 2 
      WHEN 'Red' THEN 3 
     END 

cevap

9

Sen FIND_IN_SET kullanabilirsiniz . Sorguda, bu üç renk için açıkça belirtilmeyen bir dinamik gereksinime göre sipariş vermek istediğinizi umuyorum. ORDER BY sort_order ASC

Bu sıralama düzenini yönetmek için tam esneklik sağlar.

2

Sen sort_order için renkler tablosunda bir alan eklemek ve ve değerler sağlamak: ANSI VAKA deyimi ..ya

ORDER BY FIND_IN_SET(column, 'Yellow,Blue,Red') 

:

+0

Bazen bir sıra (sarı, mavi, kırmızı), bazen (mavi, sarı, kırmızı), bazen (kırmızı, sarı, mavi), sipariş vermek gerekirse bir sütun ekleme sorunu çözer ... – StackOverflowNewbie

+8

THe ' sort_order 'alanı, sıralamanız gereken hiyerarşiyi depolamalıdır. Örneğin için. sıralamak istediğiniz renk ve 'sort_order' değeri aşağıdaki gibi olmalıdır (Mavi, Sarı, Kırmızı), Mavi - 1 Sarı - 2 Kırmızı - 3 Sıralamak istediğiniz (Kırmızı, Sarı, Mavi) Mavi - 3 Kırmızı - 1 Bu, php kodunu düzenlemeden sıralama düzenini değiştirmenize yardımcı olacaktır. Daha yüksek bir noktada, bir sayfadaki sıralama düzenini yönetmek için bir web sağlaması sağlarsınız, böylece kullanıcı/yönetici siparişi değiştirmek istediğinde. Üst düzey web sitelerinde bu şekilde ele alınır. –

2

Seçimim FIELD(str, str1, str2, ...) işlevini kullanıyor olabilir.

dizge1, str2, str3 ... liste içinde str indeksi (pozisyon) döndürür. str bulunamazsa 0 döndürür.

Yani sonuç listenizi sipariş dönüş değeri kullanabilirsiniz:

ORDER BY FIELD (color, 'Yellow', 'Blue', 'Red') 

Sırayı tersine istiyorsanız, sadece DESC ekleyin.

İlgili konular