Kom ihåg mig?
Home Menu

Menu


SQLfråga, MySQL

Ämnesverktyg Visningsalternativ
Oläst 2005-09-03, 23:42 #1
festizs avatar
festiz festiz är inte uppkopplad
Flitig postare
 
Reg.datum: Jun 2004
Inlägg: 302
festiz festiz är inte uppkopplad
Flitig postare
festizs avatar
 
Reg.datum: Jun 2004
Inlägg: 302
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
festiz är inte uppkopplad   Svara med citatSvara med citat
Oläst 2005-09-03, 23:58 #2
jimmies avatar
jimmie jimmie är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Oct 2004
Inlägg: 751
jimmie jimmie är inte uppkopplad
Mycket flitig postare
jimmies avatar
 
Reg.datum: Oct 2004
Inlägg: 751
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)
jimmie är inte uppkopplad   Svara med citatSvara med citat
Oläst 2005-09-04, 09:19 #3
zorans avatar
zoran zoran är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jun 2004
Inlägg: 598
zoran zoran är inte uppkopplad
Mycket flitig postare
zorans avatar
 
Reg.datum: Jun 2004
Inlägg: 598
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.
zoran är inte uppkopplad   Svara med citatSvara med citat
Oläst 2005-09-04, 10:29 #4
festizs avatar
festiz festiz är inte uppkopplad
Flitig postare
 
Reg.datum: Jun 2004
Inlägg: 302
festiz festiz är inte uppkopplad
Flitig postare
festizs avatar
 
Reg.datum: Jun 2004
Inlägg: 302
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.
festiz är inte uppkopplad   Svara med citatSvara med citat
Oläst 2005-09-04, 10:42 #5
jimmies avatar
jimmie jimmie är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Oct 2004
Inlägg: 751
jimmie jimmie är inte uppkopplad
Mycket flitig postare
jimmies avatar
 
Reg.datum: Oct 2004
Inlägg: 751
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.
jimmie är inte uppkopplad   Svara med citatSvara med citat
Oläst 2005-09-04, 11:29 #6
obes avatar
obe obe är inte uppkopplad
Medlem
 
Reg.datum: Dec 2004
Inlägg: 172
obe obe är inte uppkopplad
Medlem
obes avatar
 
Reg.datum: Dec 2004
Inlägg: 172
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
obe är inte uppkopplad   Svara med citatSvara med citat
Oläst 2005-09-04, 11:45 #7
festizs avatar
festiz festiz är inte uppkopplad
Flitig postare
 
Reg.datum: Jun 2004
Inlägg: 302
festiz festiz är inte uppkopplad
Flitig postare
festizs avatar
 
Reg.datum: Jun 2004
Inlägg: 302
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!
festiz är inte uppkopplad   Svara med citatSvara med citat
Oläst 2005-09-06, 05:15 #8
Menion Menion är inte uppkopplad
Nykomling
 
Reg.datum: Sep 2005
Inlägg: 10
Menion Menion är inte uppkopplad
Nykomling
 
Reg.datum: Sep 2005
Inlägg: 10
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
Menion är inte uppkopplad   Svara med citatSvara med citat
Oläst 2005-09-06, 11:40 #9
eg0master eg0master är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Oct 2004
Inlägg: 898
eg0master eg0master är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Oct 2004
Inlägg: 898
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...
eg0master är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 15:46.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017