Samstag, Januar 18, 2020

Um eine MySQL-Tabelle durch zwei Spalten

Wie Sortiere ich eine MySQL-Tabelle durch zwei Spalten?

Was ich will, sind die Artikel nach besten Bewertungen von den ersten, dann jüngsten Datum. Als ein Beispiel, dies wäre ein Beispiel für die Ausgabe (Links # ist die Bewertung, dann den Titel des Artikels, dann den Artikel-Datum)

50 | Dieser Artikel rocks | Feb 4, 2009 
35 | Dieser Artikel ist ziemlich gut | Feb 1, 2009 
5 | Dieser Artikel wird nicht so heiß | Jan 25, 2009 

Den entsprechenden SQL, das ich verwende ist:

ORDER BY article_rating, article_time DESC

Kann ich Sortieren, indem Sie die eine oder andere, aber nicht beide.

InformationsquelleAutor | 2009-02-05

5 Kommentare

  1. 440

    Standard-Sortierung ist aufsteigend, müssen Sie das Schlüsselwort DESC an, um sowohl Ihre Bestellungen:

    ORDER BY article_rating DESC, article_time DESC
    • Seltsam. Wenn ich zwei Spalten, die Namen und die Gesamt-und wollen, um alphabetisch nach name und DESC insgesamt, dann sehe ich nur, dass es nach Namen sortiert, aber nicht insgesamt
    • Wusste nicht, das war möglich! Exxelent! 🙂
    • Ich wurde Hacker mit (-1)*Feld1, Feld2 ohne Grund auf numerische Felder…danke.
    • hahaha …. nicht ist eine gute Abfrage, denn wenn Sie versuchen, nie können die Reihenfolge der „leere“ Werte der Kategorie… netter Versuch im Jahr 2009 .. aber in 2015 nicht richtig funktioniert ;), Der richtige ist „3“ oder „2“ sub query
    • Eine solche Abfrage funktioniert nicht in meinem Fall.. Tn diesem Fall habe ich nicht bekommen, die Sortierung für City select distinct Stadt, Land from Kunden order by Land desc, Stadt desc“;
    • Ich weiß nicht, warum dies so ist, überprüft als Antwort doch ist es nicht. Es sortiert die erste Spalte, dann die zweite, aber nicht beide gleichzeitig.

  2. 29
    ORDER BY article_rating, article_time DESC

    Sortieren von article_time nur, wenn es zwei Artikel mit der gleichen Bewertung. Von allen, die ich sehen kann, in deinem Beispiel, das ist genau das, was passiert.

     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.

    aber Bedenken Sie:

     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.
    • Diese Antwort half mir.Danke @Tomalak
  3. 11
    ORDER BY article_rating ASC , article_time DESC

    DESC am Ende wird Sortieren durch beide Spalten absteigend. Sie geben ASC wenn Sie es wollen, sonst

  4. 8

    Vielleicht helfen Sie jemand, der sucht, die Möglichkeit zum Sortieren der Tabelle durch zwei Spalten, sondern in paralel Weg. Dies bedeutet zum kombinieren von zwei möglichen Verwendung von Aggregat-Sortier-Funktion. Es ist sehr nützlich, wenn zum Beispiel das abrufen von Artikeln mit Volltext-Suche und auch über die Artikel veröffentlichen Datum.

    Dies ist nur ein Beispiel, aber wenn du fangen Sie die Idee finden Sie eine Menge von Aggregatfunktionen zu verwenden. Sie können auch das Gewicht der Spalten zu bevorzugen, die über eine Sekunde. Die Funktion von mir nimmt Extreme aus beiden Arten, so die wertvollsten Zeilen auf der Oberseite.

    Sorry wenn es einfacher Lösungen, um diese Arbeit zu tun, aber ich habe keine gefunden.

    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
    • oh mein Gott, warum postest du solchen code für so eine simple Frage.
  5. 4

    Folgenden wird, um Ihre Daten je nach Spalte in absteigender Reihenfolge.

    ORDER BY article_rating DESC, article_time DESC
    • Wie funktioniert eine Kopie der akzeptierten Antwort 4 Jahre später, erhalten so viele upvotes?
    • kann wegen der Erklärung 😛

Kostenlose Online-Tests