19. november 2006 - 14:18Der 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.. :/
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..
- 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)";
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 ;)
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?
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
Okey, jeg prøver mig lidt frem. Igen, tak for hjælpen. ;)
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.