Avatar billede htx98i17 Professor
11. december 2006 - 18:55 Der er 15 kommentarer og
1 løsning

udtræk fra 2 tabeller

Hej

Jeg har følgende:

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 skal se således ud:
12-12-2006
12-12-2006
13-12-2006
13-12-2006
14-12-2006
14-12-2006

Har oprettet samme spm i mysql-kategorien hvor forslaget var UNION i sql'en, men det kan jeg ikke bruge da tabellerne ikke er ens. Og det lader ikke til der er andre forslag til sql'en - derfor søger jeg en php-løsning.
Avatar billede htx98i17 Professor
11. december 2006 - 18:56 #1
PHP version 4.3.11
Mysql 4.1.11
Avatar billede htx98i17 Professor
11. december 2006 - 19:02 #2
Indholdet er naturligvis kun eksempler. Der er ikke nødvendigvis en række for hver dato i en eller begge tabeller.
Avatar billede coderdk Praktikant
11. december 2006 - 21:51 #3
Det lader da til at du godt kan bruge UNION; du skal blot alias'e et nyt navn for felterne:

(SELECT tbltimerfelt AS dato FROM tbltimer)
UNION
(SELECT tblloetimerfelt AS dato FROM tbloetimer)
ORDER BY dato
Avatar billede htx98i17 Professor
11. december 2006 - 21:57 #4
Der er mange felter...:
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

Og det virker naturligvis ikke som det ser ud her, pga der ikke er lige mange felter i hver tabel
Avatar billede coderdk Praktikant
11. december 2006 - 22:03 #5
Felterne skal hedde det samme, og der skal være lige mange. Du kan snyde den ved at give "falske" felter i den anden tabel:

(SELECT felt1, felt2 FROM tabel1)
UNION
(SELECT felt1, NULL AS felt2 FROM tabel2)

Her findes "felt2" ikke i "tabel2", så jeg laver et felt i SELECT som så bare er NULL...
Avatar billede htx98i17 Professor
12. december 2006 - 00:15 #6
okay smart,
det vil jeg kigge på imorgen
Avatar billede htx98i17 Professor
12. december 2006 - 00:16 #7
behøves felterne at hedde det samme hvis jeg giver dem alias's?
Avatar billede coderdk Praktikant
12. december 2006 - 02:37 #8
Ja, nej de skal ikke hedde det samme, hvis du blot alias'er dem så begge SELECTs matcher
Avatar billede morhan Novice
12. december 2006 - 02:44 #9
navnene på kolonnerne i tabel2 plejer nu ikke have nogen betydning.

Mht din sortering, så får du nok et problem, da hvert udtræk sorteres for sig selv. Dvs de flettes ikke sammen, for derefter at blive sorteret, som du gerne vil have dem til
Avatar billede htx98i17 Professor
12. december 2006 - 08:20 #10
okay... hm.
Det lyder lidt mærkeligt at det ikke skulle kunne lade sig gøre at sortere dem sammen?
Avatar billede coderdk Praktikant
12. december 2006 - 08:56 #11
Det er naturligvis også noget vrøvl ;) Det kan sagtens lade sig gøre, ved blot at tilføje en ORDER BY. Mit tidligere eksempel:

(SELECT tbltimerfelt AS dato FROM tbltimer)
UNION
(SELECT tblloetimerfelt AS dato FROM tbloetimer)
ORDER BY dato

...gør præcist det. Sorterer hele det resulterende resultatsæt. Man kan sågar bruge LIMIT på den også, det er stadig hele det samlede resultatsæt (forudsat at du har brugt parenteser om SELECTs).

http://dev.mysql.com/doc/refman/4.1/en/union.html
Avatar billede htx98i17 Professor
12. december 2006 - 09:00 #12
takker
Jeg sidder netop og roder med det og det begynder så småt at tage form af noget der virker :-)
Avatar billede coderdk Praktikant
12. december 2006 - 09:01 #13
Det lyder godt :) Du får lige et svar, men hvis du har problemer skriver du naturligvis bare :-D
Avatar billede htx98i17 Professor
12. december 2006 - 09:07 #14
Så begyndte klaveret at spille, smukt :-)

Jeg var lige et øjeblik bange for at den gode gamle eksperten hjælpelyst var svundet til næsten nul :-) tiderne er ikke de samme...

tusind tak for hjælpen
Avatar billede coderdk Praktikant
12. december 2006 - 09:12 #15
Så lidt :) Godt du fik det til at virke! :-D
Avatar billede htx98i17 Professor
12. december 2006 - 15:59 #16
coderdk her kan du måske også give ud af din fantastiske ekspertise :-)
http://www.eksperten.dk/spm/750362
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