[MySQL] ORDER BY twee velden

Pagina: 1
Acties:

  • eborn
  • Registratie: April 2000
  • Laatst online: 08:26
Ik zit er nu al een tijdje op te broeden, maar ik kan geen MySQL-only oplossing vinden voor het volgende probleem:

Een nieuwsbericht heeft een plaatsingstijd en een woonplaats waarop
het bericht betrekking heeft. Nu is het de bedoeling dat er uit de query een lijst met de laatste 5 berichten komt, gesorteerd op plaats.

SELECT ID FROM nieuws ORDER BY timestamp DESC, city ASC LIMIT 5

Maar dat werkt niet, omdat er als eerste gesorteerd wordt op timestamp. Alleen als er precies gelijke timestamps zijn wordt er naar de plaats gekeken. En dat is dus net niet de bedoeling :)

Ik weet het, de oplossing is wel via een tussenstap te doen (met bijv. PHP). Maar ik kan gewoon niet geloven dat zoiets simpels niet zonder sub-selects op te lossen is :)

Iemand een helder moment? Of een helder moment waarin hij mij kan verzekeren dat het écht niet met MySQL (versie 3) mogelijk is? :)

[ Voor 0% gewijzigd door eborn op 14-08-2002 11:56 . Reden: typo ]


  • D2k
  • Registratie: Januari 2001
  • Laatst online: 31-08 10:19

D2k

andersom zetten? city ASC, timestamp DESC
geen id of het werkt

Doet iets met Cloud (MS/IBM)


  • eborn
  • Registratie: April 2000
  • Laatst online: 08:26
Nope, dat werkt ook niet, want dan krijg ik eerst alle plaatsen die met een A beginnen en daarvan de laatste 5 berichten. Dus bijvoorbeeld de laatste 5 berichten van Aalsmeer :)

  • whoami
  • Registratie: December 2000
  • Laatst online: 01-09 23:04
Neen, dan krijgt hij de lijst gesorteerd per city, en worden slechts de eerste 5 rows getoond gesorteerd op city.

Volgens mij zal er nog wat programmeerwerk komen bij kijken.... 'k Kan niet direct een SQL-only oplossing bedenken die werkt in MySQL (zonder subqueries dus).

https://fgheysels.github.io/


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Je hebt een leuk probleem :P

Een vieze oplossing kan ik je alvast geven:
CREATE TEMPORARY TABLE temptabel AS SELECT (je query zonder de city-order);
SELECT * FROM temptabel ORDER BY city;

Of er een nettere oplossing zonder subqueries mogelijk is betwijfel ik, tenzij je al weet welke timestamp de gene is die precies 5 grotere waarden heeft :)
Andere optie is natuurlijk de boel pas in php te sorteren.

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

geht gewoon niet :)
Hier heb je een in-line view voor nodig, die heb je niet in mysql.

Who is John Galt?


  • eborn
  • Registratie: April 2000
  • Laatst online: 08:26
Klopt, de temp-table oplossing had ik nog niet aan gedacht, maar dat is natuurlijk wel een mogelijkheid. Op dit moment is het inderdaad gewoon opgelost met de sorteer-functie van PHP. Maar ja, het leek me zo simpel, ik dacht echt dat ik gewoon wat over het hoofd zag. ;)

Maar als je er beter over nadenkt dan is het inderdaad onlogisch om op één van beide kolommen te sorteren. Want eigenlijk bevatten de kolommen geen van beide de waardes die je echt wilt hebben.

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Ben geen mySQL kenner, maar kan je niet in de select limitten ipv in de order?
En dan sorteren op tijd
Plaats dus gewoon vergeten

We adore chaos because we like to restore order - M.C. Escher


  • eborn
  • Registratie: April 2000
  • Laatst online: 08:26
LordLarry schreef op 14 augustus 2002 @ 11:51:
Ben geen mySQL kenner, maar kan je niet in de select limitten ipv in de order?
En dan sorteren op tijd
Plaats dus gewoon vergeten
Nope, Limit gaat altijd over de hele query. Je kunt niet limiten over een gedeelte en dan daarover weer een order loslaten. Ja, dat kan wel... met een sub-select :P

  • Dash2in1
  • Registratie: November 2001
  • Laatst online: 31-08 22:49
Het nut daarvan zou overigens ver te zoeken zijn, want dan krijg je min of meer willekeurig wat rijen
Pagina: 1