Pesan tabel MySQL dengan dua kolom


228

Bagaimana cara saya mengurutkan tabel MySQL dengan dua kolom?

Yang saya inginkan adalah artikel diurutkan berdasarkan peringkat tertinggi terlebih dahulu, kemudian tanggal terbaru. Sebagai contoh, ini akan menjadi output sampel (# kiri adalah peringkat, lalu judul artikel, lalu tanggal artikel)

50 | Artikel ini mengguncang | 4 Februari 2009
35 | Artikel ini cukup bagus | 1 Februari 2009
5 | Artikel ini tidak terlalu panas | 25 Jan 2009

SQL relevan yang saya gunakan adalah:

ORDER BY article_rating, article_time DESC

Saya dapat mengurutkan berdasarkan satu atau yang lain, tetapi tidak keduanya.

Jawaban:


480

Penyortiran default naik, Anda perlu menambahkan kata kunci DESC ke kedua pesanan Anda:

ORDER BY article_rating DESC, article_time DESC

Aneh. Ketika saya memiliki dua kolom, nama dan total dan ingin memesan menurut abjad berdasarkan nama dan DESC dengan total, maka saya hanya melihat, bahwa itu dipesan berdasarkan nama, tetapi tidak secara total
Eugene

Saya telah meretas dengan (-1) * field1, field2 tanpa alasan pada bidang numerik ... terima kasih.
Asad Hasan

hahaha .... bukan permintaan yang bagus, karena jika Anda mencoba, tidak pernah dapat menyusun ulang kategori nilai "kosong" ... percobaan yang bagus di tahun 2009 .. tetapi pada tahun 2015 tidak berfungsi dengan benar;), yang benar adalah "3 "atau" 2 "sub kueri
delive

Kueri seperti itu tidak berfungsi dalam kasus saya .. Pada kasus ini, saya tidak dapat menyortir untuk Kota pilih Kota yang berbeda, Negara dari pesanan pelanggan menurut Country desc, City desc;
Pra_A

4
Saya tidak tahu mengapa ini dicentang sebagai jawaban tetapi tidak. Ini mengurutkan berdasarkan kolom pertama kemudian kolom kedua tetapi tidak keduanya sekaligus.
Aidonsnous

34
ORDER BY article_rating, article_time DESC

akan mengurutkan berdasarkan article_time hanya jika ada dua artikel dengan peringkat yang sama. Dari semua yang dapat saya lihat dalam contoh Anda, inilah yang terjadi.

 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.

tapi pertimbangkan:

 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.

Jawaban ini membantu saya.
Terima kasih @Talalak

12
ORDER BY article_rating ASC , article_time DESC

DESCpada akhirnya akan mengurutkan berdasarkan kedua kolom turun. Anda harus menentukan ASCjika Anda menginginkannya sebaliknya


8

Ini mungkin membantu seseorang yang mencari cara untuk mengurutkan tabel dengan dua kolom, tetapi secara paralel. Ini berarti menggabungkan dua jenis menggunakan fungsi penyortiran agregat. Ini sangat berguna ketika misalnya mengambil artikel menggunakan pencarian teks lengkap dan juga mengenai tanggal penerbitan artikel.

Ini hanya contoh, tetapi jika Anda menangkap idenya, Anda dapat menemukan banyak fungsi agregat untuk digunakan. Anda bahkan dapat menimbang kolom untuk memilih satu di atas detik. Fungsi saya mengambil ekstrem dari kedua jenis, sehingga baris paling dihargai ada di atas.

Maaf jika ada solusi yang lebih sederhana untuk melakukan pekerjaan ini, tetapi saya belum menemukan.

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
oh my god kenapa kamu memposting kode seperti itu untuk pertanyaan sederhana.
Ben Sinclair

4

Berikut ini akan memesan data Anda tergantung pada kedua kolom dalam urutan menurun.

ORDER BY article_rating DESC, article_time DESC

3
Bagaimana salinan jawaban yang diterima 4 tahun kemudian menerima banyak upvotes ini?
Stack Underflow

mungkin karena penjelasan: P
Rizwan Haider
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.