Avatar billede htx98i17 Professor
09. december 2006 - 17:01 Der er 14 kommentarer og
2 løsninger

udtræk fra 2 tabeller

Jeg har to tabeller tbltimer og tbloetimer.

Hvordan får jeg trukket rækker ud fra begge tabeller i samme udtræk?
Avatar billede schneidereit Nybegynder
09. december 2006 - 17:03 #1
Hej...

se det her eksempel. Håber du kan se logikken i det.

select * from tbloetimer as a, tbltimer as b where a.id=45 and b.id=48
Avatar billede arne_v Ekspert
09. december 2006 - 17:06 #2
hvis rækkerne skal flettes sammen: join

hvis rækkerne skal stables ovenpå hinanden: union
Avatar billede htx98i17 Professor
09. december 2006 - 17:12 #3
tbltimer:
arbejdsdato
brugerid

tbloetimer:
arbejdsdato
brugerid

Der skal hentes eksempelvis alle rækker fra begge tabeller sorteret efter dato...
Der er ikke nødvendigvis rækker i begge tabeller med samme brugerid inden for samme dato...
Avatar billede htx98i17 Professor
09. december 2006 - 17:13 #4
Det er nok union jeg skal bruge arne?
Avatar billede htx98i17 Professor
09. december 2006 - 17:46 #5
Jeg har tilføjet UNION til sql'en...
SELECT
                                    UNIX_TIMESTAMP(tt.oprettet) AS oprettet,
                                    UNIX_TIMESTAMP(tt.redigeret) AS redigeret,
                                    UNIX_TIMESTAMP(tt.arbejdsdato) AS arbejdsdato,
                                    UNIX_TIMESTAMP(tt.start) AS start,
                                    UNIX_TIMESTAMP(tt.slut) AS slut,
                                    tt.id,
                                    tt.opretterid,
                                    tt.editorid,
                                    tt.brugerid,
                                    tt.ordreid,
                                    tt.timer,
                                    tt.tillaegstimer,
                                    tt.kommentar,
                                    tb.navn AS brugernavn,
                                    tb2.navn AS opretternavn,
                                    tb3.navn AS editornavn,
                                    tol.rekvisition,
                                    tk.fornavn,
                                    tk.efternavn,
                                    tk.firma
                               
                                FROM
                                    tbltimer AS tt
                                   
                                LEFT JOIN
                                    tblbruger AS tb ON
                                        tb.id = tt.brugerid
                               
                                LEFT JOIN
                                    tblbruger AS tb2 ON
                                        tb2.id = tt.opretterid
                               
                                LEFT JOIN
                                    tblbruger AS tb3 ON
                                        tb3.id = tt.editorid
                               
                                LEFT JOIN
                                    tblorders AS tol ON
                                        tol.id = tt.ordreid
                                       
                                LEFT JOIN
                                    tblkunder AS tk ON
                                        tol.kundeid = tk.id
                               
                               
                               
                                WHERE
                                    tt.brugerid = '$brugerid'
                                    AND (UNIX_TIMESTAMP(tt.arbejdsdato) BETWEEN $start AND $slut)
                                   
                                UNION SELECT id FROM tbloetimer AS toe
                                WHERE toe.userid = '$brugerid'
                                    AND (UNIX_TIMESTAMP(toe.fra) BETWEEN $start AND $slut)
                               
                                ORDER BY
                                    arbejdsdato,
                                    start
                               



Den skriver The used SELECT statements have a different number of columns

Dvs at jeg ikke kan bruge union?
hvad kan man ellers gøre?
Avatar billede arne_v Ekspert
09. december 2006 - 18:05 #6
UNION stabler som sagt oven på hinanden - det er et krav at det man stabler oven på
hinanden har samme antal kolonner
Avatar billede htx98i17 Professor
09. december 2006 - 18:12 #7
jeps
men der er ikke samme antal kolonner, så kan man gøre noget andet?
Avatar billede arne_v Ekspert
09. december 2006 - 18:14 #8
2 adskilte queries ??
Avatar billede morhan Novice
09. december 2006 - 18:18 #9
det kan måske løses ved at indsætte nogle konstanter..

SELECT felt1,felt2,felt3 FROM tabel1 UNION SELECT felt4,0,0 FROM tabel2

kun felt4 udtrækkes fra tabel2, de resterende to felter sættes til 0
Avatar billede htx98i17 Professor
09. december 2006 - 18:33 #10
rækkerne jeg trækker ud fra tbltimer og tbloetimer skal sorteres efter datoen

indhold i tbltimer:
12-12-2006
13-12-2006
14-12-2006

indhold i tbloetimer:
12-12-2006
13-12-2006
14-12-2006

Udtræk:
12-12-2006
12-12-2006
13-12-2006
13-12-2006
14-12-2006
14-12-2006
Avatar billede htx98i17 Professor
10. december 2006 - 11:06 #11
Det der med konstanter virkede ikke lige umiddelbart. Har du gjort det før, for så må jeg jo have lavet en fejl...

Kan det passe at der ikke er nogen åbenlys løsning på denne opgave? altså hvis man ikke kan bruge union. Selve opgaven er jo simpel nok og kunne nok løses med  adskilte queries som arne skriver, men det må da kunne lade sig gøre med een query?
Avatar billede arne_v Ekspert
10. december 2006 - 17:54 #12
en SELECT statement er altid noget som returnerer X rækker med Y kolonner d.v.s.
"rektangulære" data
Avatar billede htx98i17 Professor
10. december 2006 - 21:03 #13
Ja? :-)
Avatar billede htx98i17 Professor
12. december 2006 - 09:17 #14
arne jeg fik union til at spille med hjælp fra en anden.
Men du skal alligevel have lidt for din hjælp. ligger du et svar?
Avatar billede arne_v Ekspert
12. december 2006 - 16:06 #15
ok
Avatar billede htx98i17 Professor
12. december 2006 - 16:07 #16
Håber du er tilfreds ellers må du sige til :-) 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
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