![]() |
Jag vill välja ut fem slumpvis valda sponsorer, men dessa slumpade skall dessutom sorteras alfabetiskt, så att det blir rätt så att säga, hur gör man det? För sätter man "namn" efter rand() så händer ju inget, och före så blir det ingen skillnad!
Kod:
SELECT namn,url,title FROM sponsorer WHERE CURRENT_DATE BETWEEN startdate AND enddate ORDER BY RAND() LIMIT 5 |
Citat:
Kod:
SELECT namn, url, title FROM (SELECT namn,url,title FROM sponsorer WHERE CURRENT_DATE BETWEEN startdate AND enddate ORDER BY RAND() LIMIT 5) as temp ORDER BY namn (Har lite väl mycket alkohol i blodet så jag tar avstånd från ev. fel) |
Citat:
"sponsorer" "namn" "title" "startdate" "enddate" ? Det ser rätt fult ut och dessutom kan orsaka fel. |
Citat:
|
Citat:
Det som används är ett "derived table" och det är därför man måste ge det ett alias. |
Troligen har du som tidigare sagts MySQL < 4.1, som inte har stöd för subquerys.
Testa detta för att komma förbi detta om du har MySQL 4.0: Kod:
(SELECT namn,url,title FROM sponsorer WHERE CURRENT_DATE BETWEEN startdate AND enddate ORDER BY RAND() LIMIT 5) |
Japp... 4.0.25... :( Tack obe för din prima fungerande lösning. tyvärr har jag inte uppdaterat till 4.1 då jag sist försökte stötte på rejält med patrull!
|
UNION är en hyfsat långsam lösning för något så enkelt som alfabetisk sortering.
Jag skulle satsat på att slänga in de fem slumpade raderna i en array (vektor om du nu föredrar), och sen sortera genom det språk du använder. I t.ex. PHP är detta mycket enkelt, och är säkerligen mycket snabbare än UNION :) |
Om du (inte helt obefogat) skall racka ner på union så kan du ju alltid använda "UNION ALL" som är snabbare än UNION och fungerar utmärkt i just det här exemplet...
|
Alla tider är GMT +2. Klockan är nu 22:55. |
Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson