Avatar billede SomTing Novice
15. april 2013 - 20:45 Der er 4 kommentarer og
1 løsning

MySQL join flere tabeller uden relation

Hejsa,

Mine Google-evner er åbenbart ikke så store som jeg troede. Jeg kan simpelthen ikke finde en reel guide, som skære ud i pap for mig, hvordan jeg kan lave én forespørgsel til at hente flere tabeller, uden en relation.

Jeg har eksempelvis 3 tabeller med følgende kolonner i:

T1:
spil_id
titel
beskrivelse
hits
flashfil
timestamp

T2:
video_id
titel
beskrivelse
hits
filmlink
timestamp

T3:
billede_id
titel
beskrivelse
hits
billede
timestamp

Hvordan i alverden får jeg hentet alle 3 rækker ud med en enkelt forespørgsel og sortere disse efter timestamp. Jeg vil nemlig gerne lave et "nyeste indhold"-script.
Avatar billede Slettet bruger
15. april 2013 - 20:55 #1
Du kunne prøve og kigge på UNION, men der mener jeg at kolonnenavnene skal hedde det samme for alle resultater.
Det kan du evt. opnå ved at give spil_id/video_id/billede_id et alias til f.eks. bare "ID" og det samme for flashfil/filmlink/billede til f.eks. "SRC".
Avatar billede Slettet bruger
15. april 2013 - 20:57 #2
Og hvis du skal vide om den enkelte række hører til det ende eller andet, kan du tilføje en ny kolonne "on-the-fly" når du laver din UNION, med hvilken type resultatet det er (spil/video/billede).
15. april 2013 - 22:51 #3
Jeg er vidtgående enig med roxki (bortset fra, at i en UNION query behøver kolonnerne ikke at hedde det samme så længe de er af samme datatype.)  Da jeg havde læst spørgsmålet og før jeg så roxki's indlæg stod det mig klart, at det var et typisk tilfælde for brug af UNION. roxki's ide med i queryen at lave en kolonne der viser hvilken tabel (hvilken indhold type) en række kommer fra havde jeg ikke selv tænkt på.

Når jeg alligevel blander mig, er det fordi du søgte noget der var temmelig 'skåret ud i pap'.  Nu ved jeg ikke hvilken datatype flashfil, filmlink, og billede er.  Hvis de er af samme data type, for eksempel BLOB (Binary Large Object) skulle nedenstående query virke.  Ellers må du ekskludere disse felter i din oversigt.  (Jeg går i den følgende query ud fra, at de ikke er af samme datatype.)

Jeg kunne forestille mig (jeg har ikke testet det) at den følgende query ville give dig en liste af alt indhold fra de tre tabeller, sorteret efter timestamp med den nyeste først:

SELECT spil_id AS id, 'spil', titel, beskrivelse, hits, timestamp FROM T1
UNION
SELECT video_id AS id, 'video', titel, beskrivelse, hits, timestamp FROM T2
UNION
SELECT billede_id AS id, 'billede'  titel, beskrivelse, hits, timestamp FROM T3
ORDER BY timestamp DESC
20. april 2013 - 08:05 #4
SomTing, kom du fra det igen?  Har du set de indlæg du fik på dette spørgsmål?  Var de til nytte?  Kom ind og fortæl hvad din videre hensigt er med spørgsmålet?  Jeg opretter dette som svar for at lette lukningen, når tiden er inde, men du vil vel også invitere svar fra anden side?
27. oktober 2013 - 12:05 #5
SomTing, jeg prøver lige en gang mere.  Kan jeg bede dig lukke det igen, i overensstemmelse med Ekspertens regler.  Hvis du mener at have fået hjælp fra mig, så accepter venligst mit svar.  I modsat fald, luk med eget svar eller bed om svar fra anden side.  Men lad mig og de andre indlæggere ikke blive hængende i et åbent spørgsmål.  Please.
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

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