Orden een MySQL-tabel met twee kolommen

Hoe sorteer ik een MySQL-tabel op twee kolommen?

Wat ik wil, zijn artikelen eerst gesorteerd op de hoogste beoordelingen en daarna op de meest recente datum. Dit zou bijvoorbeeld een voorbeelduitvoer zijn (links # is de beoordeling, dan de artikeltitel en dan de artikeldatum)

+================+============================= +==============+
| artikel_waardering | artikel | artikel_tijd |
+================+=============================+== ============+
| 50 | Dit artikel rockt | 4 februari 2009 |
+----------------+-----------------------------+-- ------------+
| 35 | Dit artikel is redelijk goed | 1 februari 2009 |
+----------------+-----------------------------+-- ------------+
| 5 | Dit artikel is niet zo hot | 25 januari 2009 |
+================+=============================+== ============+

De relevante SQL die ik gebruik is:

ORDER BY article_rating, article_time DESC

Ik kan op het een of het ander sorteren, maar niet op beide.


Antwoord 1, autoriteit 100%

Standaard sorteren is oplopend, u moet het trefwoord DESC aan beide bestellingen toevoegen:

ORDER BY article_rating DESC, article_time DESC

Antwoord 2, autoriteit 7%

ORDER BY article_rating, article_time DESC

sorteert alleen op artikel_tijd als er twee artikelen zijn met dezelfde beoordeling. Van alles wat ik in je voorbeeld kan zien, is dit precies wat er gebeurt.

v primary sort                         secondary sort v
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.

maar overweeg:

v primary sort                         secondary sort v
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.

Antwoord 3, autoriteit 3%

ORDER BY article_rating ASC , article_time DESC

DESCaan het einde sorteert op beide kolommen aflopend. Je moet ASCopgeven als je het anders wilt


Antwoord 4

Dit kan misschien iemand helpen die op zoek is naar een manier om de tabel op twee kolommen te sorteren, maar op een parallelle manier. Dit betekent het combineren van twee soorten met behulp van de geaggregeerde sorteerfunctie. Het is erg handig wanneer u bijvoorbeeld artikelen wilt ophalen met fulltext zoeken en ook met betrekking tot de publicatiedatum van het artikel.

Dit is slechts een voorbeeld, maar als u het idee begrijpt, kunt u een groot aantal samengevoegde functies vinden om te gebruiken. U kunt de kolommen zelfs wegen om de voorkeur te geven aan één boven de tweede. De functie van mij neemt extremen van beide soorten, dus de meest gewaardeerde rijen staan ​​bovenaan.

Sorry als er eenvoudigere oplossingen zijn om dit werk te doen, maar ik heb er geen gevonden.

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

Antwoord 5

Het volgende zal uw gegevens, afhankelijk van beide kolommen, in aflopende volgorde rangschikken.

ORDER BY article_rating DESC, article_time DESC

LEAVE A REPLY

Please enter your comment!
Please enter your name here

6 + twenty =

Other episodes