Avatar billede jensgram Nybegynder
10. juni 2003 - 20:25 Der er 7 kommentarer og
1 løsning

Avanceret select over flere tabeller

Hej E

Jeg har følgende query:

select brugere.brugernavn, brugere.mail, brugere.logins, brugere.downloads, brugere.foerste_tid, brugere_styles.style, brugere_bookmarks.bookmarks from brugere, brugere_styles, brugere_bookmarks where brugere.id = 1 and brugere_styles.uid = 1 and brugere_bookmarks.uid = 1

Denne skal hente nogle brugeroplysninger, der er gemt i tre tabeller (brugere, brugere_styles og brugere_bookmarks):
Brugere: id = "id"
Brugere_styles: id = "uid"
Brugere_bookmakrs: id = "uid"

Denne virker også fint, hvis uid = [valgt id] findes i "styles" og "bookmarks". Det er dog kun sikkert, at id'et findes i "brugere" og ikke i de to andre tabeller. Hvordan skal min query se ud, hvis jeg stadig vil have noget lignende:

brugernavn | mail | logins | downloads | foerste_tid | style | bookmarks 
hejhej | mail@gnu.dk | 99 | 5 | 2001-08-24 00:00:00 | mit | noget

Når der findes noget i styles og bookmarks-tabellerne, men ellers blot:

brugernavn | mail | logins | downloads | foerste_tid | style | bookmarks 
hejhej | mail@gnu.dk | 99 | 5 | 2001-08-24 00:00:00 |  | 

Jeg kan ikke lige overskue det...

Ved ikke, om ovenstående bliver lidt forvirrende, men kort sagt:

brugernavn | mail | logins | downloads | foerste_tid
Findes ALTID

Det er dog ikke altid, at
style | bookmarks

Findes, men hvis de gør, så skal de også vælges...

Håber I kan forstå det!
Avatar billede arne_v Ekspert
10. juni 2003 - 21:45 #1
Brug LEFT JOIN !
Avatar billede arne_v Ekspert
10. juni 2003 - 21:47 #2
SELECT *
FROM brugere LEFT JOIN brugere_styles ON brugere.id=brugere_styles.uid
WHERE brugere.id=1

vil hente alle matchende records fra brugere selvom der ikke er noget
i brugere_styles for brugeren.

Den skal så bare udvides til 3 tabeller.
Avatar billede jensgram Nybegynder
11. juni 2003 - 07:58 #3
Ok - det kendte jeg ikke lige (er ikke så stærk i det der db-halløj).
Jeg prøver og vender tilbage...
Avatar billede jensgram Nybegynder
11. juni 2003 - 08:08 #4
Ok - det virker fint som du skriver. Jeg skal du LEFT JOIN'e fra to tabeller. Jeg prøvede med følgende:

SELECT *
FROM brugere LEFT JOIN brugere_styles, brugere_bookmarks ON brugere.id = brugere_styles.uid AND brugere.id = brugere_bookmarks.uid
WHERE brugere.id = 2

Men det virker ikke. Der kommer alt for mange records. I min uvidenhed udskiftede jeg AND med OR, men det hjalp heller ikke.

Kan du evt. skrive et eksempel, hvor der joines fra begge tabeller (brugere_styles og brugere_bookmarks)???
Avatar billede jensgram Nybegynder
11. juni 2003 - 08:09 #5
"Jeg skal du LEFT JOIN'e fra to tabeller" = Jeg skal dog LEFT JOIN'e fra to tabeller
Avatar billede arne_v Ekspert
11. juni 2003 - 08:31 #6
Det må være:

SELECT *
FROM (brugere LEFT JOIN brugere_styles ON brugere.id = brugere_styles.uid)
    LEFT JOIN brugere_bookmarks ON brugere.id = brugere_bookmarks.uid
WHERE brugere.id = 2
Avatar billede jensgram Nybegynder
11. juni 2003 - 08:38 #7
Så prøver jeg lige det...
Avatar billede jensgram Nybegynder
11. juni 2003 - 08:41 #8
JEPS - min endelige SQL blev:

SELECT brugere.brugernavn, brugere.mail, brugere.logins, brugere.downloads, brugere.foerste_tid, brugere_styles.style, brugere_bookmarks.bookmarks
FROM (brugere LEFT JOIN brugere_styles ON brugere.id = brugere_styles.uid)
    LEFT JOIN brugere_bookmarks ON brugere.id = brugere_bookmarks.uid
WHERE brugere.id = 1

Det virker bare perfekt. Mange tak for hjælpen, Arne.
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