Avatar billede cronick Nybegynder
19. november 2006 - 14:18 Der er 10 kommentarer og
1 løsning

mysql_query (left join) fejl

Hey.

Nu har jeg efterhånden kigget denne string igennem temmelig mange gange, og kan simpelthen ikke finde den dumme fejl.

Stringen:
mysql_query("SELECT tabel1.* FROM tabel1 LEFT JOIN(SELECT id, max(settime) AS senesteSettime FROM tabel2 GROUP BY brugernavn) AS brugere ON tabel1.ven = brugere.id WHERE tabel1.bruger_id = '$id' ORDER BY brugere.senesteSettime DESC") or die(mysql_error());

Tabel 1: ligger bruger_id og ven, som er de eneste jeg skal bruge. (hedder brugere_venner)
Tabel 2: id, brugernavn og settime. (hedder brugere)

Meningen er, at tabel1 er ens brugers venner, og tabel2 er selve brugerne. Så skal den naturligvis finde fra tabel1, hvor "ven" er $id, og så sortere dem efter hvor "stor" "settime" er.. (settime er hvornår brugeren sidst var online).

- Håber nogen kan se fejlen, jeg kan hvert fald ikke.. :/
Avatar billede coderdk Praktikant
19. november 2006 - 15:11 #1
Det lyder som:

SELECT bv.ven FROM brugere_venner AS bv INNER JOIN brugere AS b ON bv.bruger_id = b.id ORDER BY b.settime DESC

Du skal kun have "ven" ud, ikke?
Avatar billede coderdk Praktikant
19. november 2006 - 15:43 #2
Sorry:

SELECT bv.ven FROM brugere_venner AS bv INNER JOIN brugere AS b ON bv.bruger_id = b.id AND bv.bruger_id = $id ORDER BY b.settime DESC
Avatar billede cronick Nybegynder
19. november 2006 - 15:44 #3
Joup, men det virker ikke helt godt.. Den sorterer vist ikke efter størrelsen på settime, og den viser det heller ikke korrekt. Den viser ikke kun "vennen", den viser også en selv..
Avatar billede cronick Nybegynder
19. november 2006 - 15:47 #4
Okey, nu viser den kun vennerne, som den skal.. Men den sorterer ikke rigtigt..
Avatar billede cronick Nybegynder
19. november 2006 - 16:02 #5
- Jeg har forresten også skiftet server, og nu vil den ikke lave den alder-beregning du lavede til stringen:
$alder = "((UNIX_TIMESTAMP()-UNIX_TIMESTAMP(STR_TO_DATE(CONCAT(foedselsdag_aar,'/',foedselsdag_maaned,'/',foedselsdag_dag),'%Y/%m/%d')))/31536000)";
Avatar billede coderdk Praktikant
19. november 2006 - 16:25 #6
Hmm prøv lige:

SELECT bv.ven, b2.settime FROM brugere_venner AS bv INNER JOIN brugere AS b ON bv.bruger_id = b.id AND bv.bruger_id = $id INNER JOIN brugere AS b2 ON bv.ven = b2.bruger_id ORDER BY b2.settime DESC

Hvad version kører den nye mysql? Mit gæt er at det er en ældre end den anden. Mit forslag er at du laver dine tre felter, år, måned og dag om til en DATETIME - Det er meget lettere at arbejde med ;)
Avatar billede coderdk Praktikant
19. november 2006 - 16:25 #7
(omkr. select - såfremt at "ven" er bruger_id på vennen)
Avatar billede cronick Nybegynder
19. november 2006 - 16:45 #8
Nu virker det med venner.. Måtte lige rette b2.bruger_id til b2.id :)
Det med datetime, det kan jo være jeg lige skal kigge på det så. Men det er altså så, at hele fødselsdagen står i ét felt, og så ved hjælp af en anden funktion, kan få en alder ud af det?
Avatar billede coderdk Praktikant
19. november 2006 - 18:16 #9
Du kan prøve at bruge DATEDIFF (men det er vist også MySQL 4.1.1) - Anyway, du kan jo alligevel ikke have brugere der er født før 1/1-1970 med UNIX_TIMESTAMP ;) Hvis det er ok, kan du jo bare bruge INT og gemme hele fødselsdatoen som time() / UNIX_TIMESTAMP
Avatar billede coderdk Praktikant
19. november 2006 - 18:16 #10
Hov du får lige et svar :)
Avatar billede cronick Nybegynder
21. november 2006 - 14:52 #11
Okey, jeg prøver mig lidt frem. Igen, tak for hjælpen. ;)
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester