Avatar billede horizon Nybegynder
22. juni 2009 - 20:47 Der er 2 kommentarer og
1 løsning

Samle flere queries i en query

Jeg har f.eks. to tabeller

tabel kategorier
---
ID_KATEGORI (int)
navn (varchar)

tabel overskrifter
---
navn (varchar)
ID_KATEGORI (int)

Lige pt. hvis jeg ønsker at udskrive en samlet oversigt over alle kategorier og alle overskrifter under hver enkelt kategori så bruger jeg en query i stil med "SELECT * FROM kategorier"

Derefter bruger jeg en PHP foreach på hver række og kører en "SELECT * FROM overskrifter WHERE overskrifter.ID_KATEGORI = kategorier.ID_KATEGORI"

Er det muligt at lave en samlet query i stedet for at køre mange ens queries? Og i givet fald hvordan? Jeg har prøvet at læse noget om LOOPs, NESTED QUERIES og SUBQUERIES uden at finde noget jeg kunne prøve at lave noget ud fra.
Avatar billede acore Ekspert
22. juni 2009 - 20:52 #1
Med

SELECT * FROM overskrifter
LEFT JOIN kategorier USING(ID_KATEGORI)
ORDER BY kategorier.navn, overskrifter.navn

får du en alfabetisk sorteret liste, som du kan udskrive med while(...)
Avatar billede horizon Nybegynder
22. juni 2009 - 21:10 #2
Jeg prøvede lige at køre den i phpmyadmin og jeg får rigtigt nok alle overskrifter for hvert, men jeg får samtidigt kategorinavnet udskrevet for hver række. er det ikke muligt at få noget i stil med

array(
"0" => array("kategorinavn1" => "noget", "rows" => array("overskrift","overskrift","overskrift")),
"1" => array("kategorinavn2" => "noget", "rows" => array("overskrift","overskrift","overskrift")),
"2" => array("kategorinavn3" => "noget", "rows" => array("overskrift","overskrift","overskrift"))) etc...

Eller skal man bearbejde dataet bagefter? I mit hoved virker det som om der bliver hentet overflødig data (kategorinavnet) igen og igen hvis man har mange rækker, eller er det bare mig der er sippet?
Avatar billede acore Ekspert
22. juni 2009 - 23:44 #3
Tja, det er sådan et mysql query virker - det returnerer en 2D tabel - hverken mere eller mindre.

Din while skal bare starte med at udskrive kategorinavnet, hvis det er første gang eller hvis det er skiftet siden sidste, så får du det ønskede resultat.

Mht evt overfødighed - prøv at tage tid på den kode i forhold til din oprindelige - den er langt mere effektiv.
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
Computerworld tilbyder specialiserede kurser i database-management

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