29. april 2001 - 00:31Der er
6 kommentarer og 3 løsninger
sql syntaks
Jeg har en SQL sætning der lister alle brugere med deres gennemsnitsscore. User ligger i en tabel og scoren i en anden. Hvis en user ikke har nogen score-rækker (tips-tabellen) bliver brugeren ikke listet. Jeg vil have han bliver listet med et gennemsnit på nul. Kan det lade sig gøre i en SQL?
SELECT AVG(tips.score) as avgScore, user.username, tips.userid FROM tips \" RIGHT JOIN user ON tips.userid = user.userid GROUP BY tips.userid, user.username
nu kan jeg ikke lige huske hvad det er der kommer ud af et tomt felt i en database, men jeg menere at det er \"notdefindet\", men det kan du jo selv lige se.
og så kan du lave en if sætning der checker om brugens score = nodefindet og så skal hans score være lig 0....
Jeg har ikke gode erfaringer med LEFT JOIN i MySql kombineret med aggregat- funktioner på en GROUP BY. Det virker anderledes end med en JOIN (f.eks. user,tips). Om det kun er MySql ved jeg ikke.....
Du må kunne bruge en UNION SELECT, så du først henter de records, som du gør for nuværende, og derefter \"sammenkæder\" med de records, som ikke er i score-tabellen...
SELECT AVG(tips.score) as avgScore, user.username, tips.userid FROM tips RIGHT JOIN user ON tips.userid=user.userid group by tips.userid, user.username UNION SELECT 0, user.username, user.userid from user RIGHT JOIN tips ON user.userid=tips.userid where tips.userid Is Null;
JEG IDIOT !!! - OVERKILL !!! - og den slags udtryk...
Du skal selvfølgelig \"bare\" nøjes med at bruge brugeroplysninger fra brugertabellen og score-oplysning fra scoretabellen... derved får du en \"fuld\" bruger uden score.
SELECT AVG(tips.score) as avgScore, user.username, user.userid FROM tips RIGHT JOIN user ON tips.userid=user.userid GROUP BY user.userid, user.username
ALTSÅ: Det eneste sted du skal bruge tips er ved score...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.