WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   SQLfråga, MySQL (https://www.wn.se/forum/showthread.php?t=9656)

festiz 2005-09-03 23:42

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

jimmie 2005-09-03 23:58

Citat:

Originally posted by festiz@Sep 3 2005, 22:42
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

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
Borde funka.

(Har lite väl mycket alkohol i blodet så jag tar avstånd från ev. fel)

zoran 2005-09-04 09:19

Citat:

Originally posted by festiz@Sep 3 2005, 23:42
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

Inte svar på din fråga men är det så smart att blanda svenska och engelska namn på fälten i databasen?

"sponsorer"
"namn"
"title"
"startdate"
"enddate"

?

Det ser rätt fult ut och dessutom kan orsaka fel.

festiz 2005-09-04 10:29

Citat:

Ursprungligen postat av jimmie
Citat:

Ursprungligen postat av festiz
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

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
Borde funka.

(Har lite väl mycket alkohol i blodet så jag tar avstånd från ev. fel)

Fungerade inte, out of the box, ska läsa lite på mysql.org. Men nu vet jag iaf att jag ska använda temp-tabeller.

jimmie 2005-09-04 10:42

Citat:

Ursprungligen postat av festiz
Citat:

Originally posted by -jimmie@Sep 3 2005, 23:58
Citat:

Ursprungligen postat av festiz
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

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
Borde funka.

(Har lite väl mycket alkohol i blodet så jag tar avstånd från ev. fel)


Fungerade inte, out of the box, ska läsa lite på mysql.org. Men nu vet jag iaf att jag ska använda temp-tabeller.

Öhh varför funkade det inte. Vad fick du för felmeddelande? Det där ska funka utan problem, dock så måste man använda mysq >=4.1x

Det som används är ett "derived table" och det är därför man måste ge det ett alias.

obe 2005-09-04 11:29

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)
UNION
(SELECT namn,url,title FROM sponsorer LIMIT 0)
ORDER by namn


festiz 2005-09-04 11:45

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!

Menion 2005-09-06 05:15

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 :)

eg0master 2005-09-06 11:40

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