31. august 2006 - 22:02Der er
32 kommentarer og 1 løsning
select fra flere tabeller
Hej!
Jeg skal selecte noget data fra min database. Jeg bruger følgende query:
$res = mysql_query("select * from billeder where godkendt='1' order by id desc limit 0,5");
Det virker som det skal!
Nu vil jeg gerne selecte fra tabellerne "billeder", "spil" og "videoer" på samme tid.. Hvordan skal min query se ud?
Jeg tror ikke det er smarte at sortere efter ID, da hver enkelt table har sit eget ID-kæde. Måske kan man sortere efter "time", da den jo er tilfælles for alle tabellerne!?
Manuelle og semi-automatiske strategier for identitetsstyring virker - lige indtil nogen beder om dokumentation. For at undgå denne fare har DKTV taget kontrol over sin identitets- og adgangsstrategi.
Når du SELECT'er fra billeder kan du få op til 5 resultater ud. Hvad når du SELECT'er fra alle 4 tabeller på en gang? Ønsker du at få 4x5 resultater ud eller hvad?
Jeg henter thumbnails fra tabellerne. Så uanset hvilke tabeller jeg henter fra, skal der kun være fem resultater. Tjek evt. www.humorfreak.dk/2 >> Forsiden >> Nyeste Uploads
Ja, så er det jo ikke nogen god ide at sortere efter id'er da der sikkert ikke er lige mange billeder i hver tabel. En sådan løsning kræver at du udvider hver tabel med et dato felt sådan at du kan se hvornår billedet er fra.
I øvrigt: Hvis ellers de 4 tabeller er meget ens i deres struktur, og de kun adskiller sig ved at indeholde noget forskelligt ... så burde du overveje om de ikke skulle slås sammen til én tabel. Du kan så have et ekstra felt som indikere typen af en række.
Men spørgsmålet er stadig hvordan jeg vælger fra alle tabellerne samtidig. Der kan jo godt være uploadet to billeder som det nyeste, efterfulgt af et spil osv..
SELECT * FROM (SELECT * FROM billeder WHERE godkendt='1' ORDER BY time DESC LIMIT 0,5) UNION (SELECT * FROM spil WHERE godkendt='1' ORDER BY time DESC LIMIT 0,5) UNION (SELECT * FROM videoer WHERE godkendt='1' ORDER BY time DESC LIMIT 0,5) ORDER BY time DESC LIMIT 0,5
Ja det er helt bestemt derfor. Subselect's kom først til i en af 4.x versionerne af MySQL. Vi er nu ved 5.x. Måske burde du overveje at opgradere?
Med en så gammel MySQL er der nok ikke andet for end at trække de 5 resultater ud i 3 SQL søgninger og så lave udvælgelsen i PHP-koden i stedet for i SQL.
Umiddelbart ville jeg forvente at der ikke var nogen som helst problemer med det. PÅ den anden side er det lang tid siden at jeg selv har prøvet noget sådant, så jeg kan da ikke sværge.
Lav dog under alle omstændigheder en backup af databasen først.
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.