29. maj 2007 - 14:44Der er
9 kommentarer og 1 løsning
Hjælp til SELECT i MySQL
Hej eksperter! Jeg sidder i øjeblikket og roder lidt med et vennesystem på mit site, og nu kunne jeg godt tænke mig at hive ud hvornår brugeren sidst har været logget ind, det kan jeg også sagtens gøre via en ny SQL sætning, men nu kunne jeg godt tænke mig at vide om det kan gøres i selve SQL sætningen.
Lige nu ser det sådan her ud: SQL = "SELECT a.id, a.friendID, b.username, b.online, b.kon, b.birthday, picture_add, picture_validate FROM users_friends a INNER JOIN users b ON a.friendID = b.ID WHERE a.userID=" & strID & " AND a.status = 2 ORDER BY b.online DESC LIMIT " & intStart & ", " & intPageSize & ""
Det funger også fint, men hvordan hiver jeg brugerens seneste login ud sammen med det? Tabellen hedder 'users_loginfo' og skal joine på b.ID = users_loginfo.userID (hvis det kan laves i en JOIN sætning) - det håber jeg det kan, det vil gøre det meget hurtigere at hive ud. I skal dog lige være opmærksom på at en bruger jo godt kan ha' logget ind flere gange, så den skal hive den nyeste ud for hver bruger.
Hos Computerworld it-jobbank er vi stolte af at fortsætte det gode partnerskab med folkene bag IT-DAY – efter vores mening Danmarks bedste karrieremesse for unge og erfarne it-kandidater.
SQL = "SELECT a.id, a.friendID, b.username, b.online, b.kon, b.birthday, picture_add, picture_validate, MAX(c.loginTime) as loginTime, MAX(c.loginDate) as loginDate "&_ "FROM users_friends a INNER JOIN users b ON a.friendID = b.ID "&_ "LEFT JOIN users_loginfo c on b.ID = c.userID "&_ "WHERE a.userID=" & strID & " AND a.status = 2 "&_ "GROUP BY a.id, a.friendID, b.username, b.online, b.kon, b.birthday, picture_add, picture_validate "&_ "ORDER BY b.online DESC LIMIT " & intStart & ", " & intPageSize & ""
Men den sorterer forkert. Det er ikke brugerens seneste login der bliver hevet ud og det tager en krig for den. Kan det hænge sammen med der er 35000 poster i users_loginfo? Og skal det laves på en anden måde?
Nej. Du har misforstået, jeg lister alle en brugers venner - henter brugerens brugernavn, fødselsdag etc., og samtidig vil jeg gerne ha' at den skal hente brugerens seneste login ud.
0xffff >> Hastighedsmæssig er der ikke stor forskeld på Left og inner join. Forskellen ligger kun i at NULL værdier bliver ignoreret på match betingelsen.
Ja, det er rigtigt. Men fennec det virker jo ikke nu, den sorterer jo forkert og det tager en krig - så spørger jeg, er det fordi der ligger 35000 poster i tabellen?
Er også bedst at skrive det direkte ind i usertabellen.
Bare af nysgerighed, hvilken datatype er loginTime og loginDate?
Synes godt om
Ny brugerNybegynder
Din løsning...
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.