Avatar billede rthuls Nybegynder
26. oktober 2004 - 10:04 Der er 9 kommentarer og
1 løsning

sql-hell

Jeg bliver altså nødt til, at få lidt hjælp til opbygningen af min sql-sætning. I øjeblikket ser den sådan her ud og den virker endda :o)

$DB->Query("SELECT * FROM posts, brugere, kategorier WHERE brugere.bruger_id=posts.bruger_id AND posts.synlig=1 AND kategorier.kat_id=posts.kat_id ORDER BY posts.post_id DESC LIMIT 0," . $maxPosts . "");

Jeg har en tabel der hedder kommentarer. Den indeholder følgende felter:
kommentar_id, post_id, kommentar


Jeg prøver så at omskrive min sql-sætning, så den samtidig tæller hvor mange kommentarer der er til hver post.
Avatar billede Slettet bruger
26. oktober 2004 - 10:21 #1
Og problemet er vel, at den ignorerer posts uden kommentarer, når du prøver at sætte dem sammen?

For det første bør man skrive felterne, man ønsker at modtage i stedet for bare *.

Prøv med dette:

SELECT *, count(kommentarer.kommentar_id) AS antalkommentarer
  FROM posts, brugere, kategorier

LEFT JOIN kommentarer ON posts.post_id=kommentarer.post_id

  WHERE brugere.bruger_id=posts.bruger_id
    AND posts.synlig=1
    AND kategorier.kat_id=posts.kat_id
  ORDER BY posts.post_id DESC
  LIMIT 0,$maxPosts
Avatar billede rthuls Nybegynder
26. oktober 2004 - 10:27 #2
Problemet er at jeg slet ikke kan overskue hvordan jeg skal sætte dem sammen :)

Jeg får denne fejl:

Mixing of GROUP columns (MIN(),MAX(),COUNT()...) with no GROUP columns is illegal if there is no GROUP BY clause
Avatar billede Slettet bruger
26. oktober 2004 - 10:30 #3
SELECT *, count(kommentarer.kommentar_id) AS antalkommentarer
  FROM posts, brugere, kategorier

LEFT JOIN kommentarer ON posts.post_id=kommentarer.post_id

  WHERE brugere.bruger_id=posts.bruger_id
    AND posts.synlig=1
    AND kategorier.kat_id=posts.kat_id
  GROUP BY posts.post_id
  ORDER BY posts.post_id DESC
  LIMIT 0,$maxPosts

Men ret * til at liste alle de felter, som du vil have udskrevet.
Avatar billede rthuls Nybegynder
26. oktober 2004 - 10:44 #4
Nu kommer der ingen fejl, men $antalkommentarer er tom hver gang?
Avatar billede rthuls Nybegynder
26. oktober 2004 - 11:01 #5
Nej vent, det er bare mig der laver fejl. Det virker som det skal.
Vil du lægge et svar?
Avatar billede Slettet bruger
26. oktober 2004 - 11:02 #6
Ja.
Avatar billede rthuls Nybegynder
26. oktober 2004 - 11:23 #7
Tak for hjælpen!

Må jeg lige spørge om en ting til? Jeg har bemærket at du ikke "hopper ud af" sql sætningen, ligesom jeg gør.

Altså:
LIMIT 0,$maxPosts

istedet for:
LIMIT 0," . $maxPosts . "

Er det den rigtige måde at gøre det på?
Avatar billede Slettet bruger
26. oktober 2004 - 11:37 #8
Det er i høj grad et spørgsmål om smag, om man gør det på den ene eller anden måde.

Denne måde kan dog give problemer med f.eks arrays eller objekter. Hvis jeg skal bruge noget fra et array i en streng, plejer jeg at gøre således:

$sql="SELECT tlf FROM tabel WHERE fornavn='{$data['fornavn']}' AND efternavn='{$data['efternavn']}'"

altså sætte {} uden om variabelangivelsen. Disse {} får PHP til at fortolke variabelangivelsen på helt samme måde, som den ville uden for en streng.
Avatar billede Slettet bruger
26. oktober 2004 - 11:41 #9
Der står en hel del om det på denne side: http://dk.php.net/manual/en/language.types.string.php
Avatar billede rthuls Nybegynder
26. oktober 2004 - 16:09 #10
Takker!
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