MySQL tablosunu iki sütuna göre sipariş etme


228

MySQL tablosunu iki sütuna göre nasıl sıralayabilirim?

İstediğim makaleler önce en yüksek dereceye, sonra en son tarihe göre sıralanmıştır. Örnek olarak, bu örnek bir çıktı olacaktır (sol # derecelendirme, daha sonra makale başlığı, sonra makale tarihi)

50 | Bu makale | 4 Şub 2009
35 | Bu makale oldukça iyi | 1 Şub 2009
5 | Bu makale çok sıcak değil | 25 Ocak 2009

Kullandığım ilgili SQL:

ORDER BY article_rating, article_time DESC

Birine ya da diğerine göre sıralayabilirim, ama ikisine birden değil.

Yanıtlar:


480

Varsayılan sıralama artmaktadır, her iki siparişinize DESC anahtar kelimesini eklemeniz gerekir:

ORDER BY article_rating DESC, article_time DESC

Garip. İki sütunum olduğunda, isim ve toplam ve isme ve DESC'ye göre toplam olarak alfabetik olarak sıralamak istediğimde, o zaman sadece isme göre sipariş edildiğini görüyorum, ancak toplamda değil
Eugene

Sayısal alanlarda hiçbir sebep olmadan (-1) * field1, field2 ile hack yapıyorum ... teşekkürler.
Asad Hasan

hahaha .... iyi bir sorgu değildir, çünkü denerseniz, "boş" değerler kategorisini asla yeniden sıralayamazsınız ... 2009'da iyi deneyin .. ama 2015'te doğru çalışmıyor;), Doğru "3 "veya" 2 "alt sorgusu
15'te 38

Benim durumumda böyle bir sorgu çalışmıyor .. Tn bu durumda, ben Şehir desc, Şehir desc müşterilerin sipariş sipariş Şehir seçmek için sıralama alamadım;
Pra_A

4
Bunun neden cevap olarak kontrol edildiğini bilmiyorum ama henüz değil. İlk sütuna göre ikinci sütuna göre sıralar, ancak ikisini aynı anda değil.
aidonsnous

34
ORDER BY article_rating, article_time DESC

aynı derecelendirmeye sahip iki makale varsa makale_zamanına göre sıralar. Örneğinizde görebildiğim kadarıyla, tam olarak olan budur.

 primary sort                         secondary sort 
1.  50 | This article rocks          | Feb 4, 2009    3.
2.  35 | This article is pretty good | Feb 1, 2009    2.
3.  5  | This Article isn't so hot   | Jan 25, 2009   1.

düşünün:

 primary sort                         secondary sort 
1.  50 | This article rocks          | Feb 2, 2009    3.
1.  50 | This article rocks, too     | Feb 4, 2009    4.
2.  35 | This article is pretty good | Feb 1, 2009    2.
3.  5  | This Article isn't so hot   | Jan 25, 2009   1.

Bu cevap bana yardımcı oldu. Teşekkürler @Tomalak
Jayani Sumudini

12
ORDER BY article_rating ASC , article_time DESC

DESCsonunda her iki sütuna göre de azalacaktır. ASCAksi takdirde isteyip istemediğinizi belirtmeniz gerekir


8

Bu, tabloyu iki sütuna göre sıralama yolunu arayan birine paralel bir şekilde yardımcı olabilir. Bu, toplam sıralama işlevini kullanarak iki türü birleştirmek anlamına gelir. Örneğin, tam metin araması kullanarak makaleler alınırken ve makalenin yayınlanma tarihi ile ilgili olarak çok kullanışlıdır.

Bu sadece örnektir, ancak fikri yakalarsanız kullanmak için bir çok toplama işlevi bulabilirsiniz. Hatta bir saniyeden fazla tercih etmek için sütunları bile ağırlıklandırabilirsiniz. Benim fonksiyonum her iki türden de aşırı uçlar alıyor, bu nedenle en değerli satırlar üstte.

Bu işi yapmak için daha basit çözümler varsa, ama hiç bulamadım.

SELECT
 `id`,
 `text`,
 `date`
 FROM
   (
   SELECT
     k.`id`,
     k.`text`,
     k.`date`,
     k.`match_order_id`,
     @row := @row + 1 as `date_order_id`
     FROM
     (
       SELECT
         t.`id`,
         t.`text`,
         t.`date`,
         @row := @row + 1 as `match_order_id`
         FROM
         (
           SELECT
             `art_id` AS `id`,
             `text`   AS `text`,
             `date`   AS `date`,
             MATCH (`text`) AGAINST (:string) AS `match`
             FROM int_art_fulltext
             WHERE MATCH (`text`) AGAINST (:string IN BOOLEAN MODE)
             LIMIT 0,101
         ) t,
         (
           SELECT @row := 0
         ) r
         ORDER BY `match` DESC
     ) k,
     (
       SELECT @row := 0
     ) l
     ORDER BY k.`date` DESC
   ) s
 ORDER BY (1/`match_order_id`+1/`date_order_id`) DESC

34
Aman tanrım neden böyle basit bir soru için böyle bir kod gönderiyorsun.
Ben Sinclair

4

Aşağıda her iki sütuna bağlı olarak verileriniz azalan sırada sıralanacaktır.

ORDER BY article_rating DESC, article_time DESC

3
4 yıl sonra kabul edilen cevabın bir kopyası nasıl bu kadar oy aldı?
Stack

açıklama nedeniyle olabilir: P
Rizwan Haider 28:09
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.