Avatar billede pitzen Nybegynder
31. august 2006 - 22:02 Der 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!?
Avatar billede or.han Nybegynder
31. august 2006 - 22:07 #1
syntaksen er fx flg hvis du har tre tabeller:

SELECT tabel1.*,tabel2.*,tabel3.*
FROM tabel1,tabel2,tabel3
WHERE tabel1.id = 2
ORDER BY tabel1.id DESC
LIMIT 0,5;
Avatar billede nielle Nybegynder
31. august 2006 - 22:09 #2
Ikke hvis hver af del-SELECT'ene kan give mere end et resultat (som indikeret af at der er en LIMIT på).
Avatar billede nielle Nybegynder
31. august 2006 - 22:21 #3
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?
Avatar billede pitzen Nybegynder
31. august 2006 - 22:28 #4
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
Avatar billede pitzen Nybegynder
31. august 2006 - 22:33 #5
Bare de fem (tilsammen) nyeste fra tabellerne kommer frem.
Avatar billede nielle Nybegynder
31. august 2006 - 22:36 #6
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.
Avatar billede pitzen Nybegynder
31. august 2006 - 22:39 #7
Det har jeg allerede! "time" hedder det
Avatar billede nielle Nybegynder
31. august 2006 - 22:40 #8
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.
Avatar billede pitzen Nybegynder
31. august 2006 - 22:40 #9
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..
Avatar billede pitzen Nybegynder
31. august 2006 - 22:40 #10
ahh... du siger noget..!
Avatar billede nielle Nybegynder
31. august 2006 - 22:42 #11
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
Avatar billede nielle Nybegynder
31. august 2006 - 22:43 #12
Og hvis du samler dem til en:

SELECT * FROM samletTabel WHERE godkendt='1' ORDER BY time DESC LIMIT 0,5
Avatar billede pitzen Nybegynder
31. august 2006 - 22:43 #13
Men så får jeg vel et problem med ID-feltet, da de automatisk bliver lavet af databasen. Så vil der komme store spring i hver enkelt types's ID'er...
Avatar billede nielle Nybegynder
31. august 2006 - 22:46 #14
Og hvorfor er det et problem?
Avatar billede pitzen Nybegynder
31. august 2006 - 22:49 #15
Jeg har prøvet svaret med UNION-løsningen og får følgende fejl:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/humorfreak/html/2/includes/nyeste_uploads.php on line 36
Avatar billede nielle Nybegynder
31. august 2006 - 22:56 #16
Prøv at sætte en "... or die(mysql_error());" på din mysql_query().
Avatar billede pitzen Nybegynder
31. august 2006 - 23:01 #17
You have an error in your SQL syntax near 'SELECT * FROM billeder ORDER BY time DESC LIMIT 0,5)UNION(SELECT * FROM spil ORD' at line 1
Avatar billede nielle Nybegynder
31. august 2006 - 23:09 #18
Det lyder som om at det er en lidt ændre version af MySQL?
Avatar billede pitzen Nybegynder
31. august 2006 - 23:10 #19
Jeg har 2.5.4, nok derfor!
Avatar billede pitzen Nybegynder
31. august 2006 - 23:10 #20
Et lille sidespørsmål; hvorn opdaterer jeg lettest uden at slette noget?

Undskyld min n00byness ;)
Avatar billede nielle Nybegynder
31. august 2006 - 23:30 #21
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.
Avatar billede nielle Nybegynder
31. august 2006 - 23:31 #22
Hvad mener du med at "opdatere uden at slette". Når man opdatere så overskriver man jo noget ... og det er vel en slags sletning.
Avatar billede pitzen Nybegynder
01. september 2006 - 16:17 #23
Jeg vil bare undgå at slette dataen i tabellen.. Kan man opdatere uden at gøre det?
Avatar billede nielle Nybegynder
01. september 2006 - 17:02 #24
En UPDATE-sætning sletter aldrig rækker ... men den overskriver selvfølgeligt de felter der SET'es til noget andet som en del af UPDATE-sætningen.

Hvis man skal slette rækker, skal man igang med en helt anden kommando end UPDATE, nemlig DELETE-kommandoen.
Avatar billede pitzen Nybegynder
01. september 2006 - 17:50 #25
Du misforstår mig vist.. ;)

Jeg skal opdaterer MySQL..
Avatar billede nielle Nybegynder
01. september 2006 - 17:53 #26
Ahhh, ok, sådan.

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.
Avatar billede pitzen Nybegynder
03. september 2006 - 16:52 #27
jeg har pt. lidt bøvl med serveren. Men jeg går ud fra at det virker når jeg får opdateret MySQL.

Tak for hjælpen - Post et svar!
Avatar billede nielle Nybegynder
03. september 2006 - 17:16 #28
Det haster altså ikke med point. Få du bare den server op og køre, og så kan vi jo tage den derfra. :^)
Avatar billede nielle Nybegynder
11. september 2006 - 20:32 #29
Er du kommet videre med denne her?
Avatar billede pitzen Nybegynder
12. september 2006 - 11:53 #30
Jeg valgte at samle det hele i én tabel istedet.. Det fungerer godt og er en fordel på flere punkter.. Tak for hjælpen!

Post et svar :D
Avatar billede nielle Nybegynder
12. september 2006 - 16:53 #31
Svar :^)
Avatar billede nielle Nybegynder
20. september 2006 - 20:42 #32
Så mangler du bare at acceptere svaret :^)
Avatar billede nielle Nybegynder
24. september 2006 - 07:31 #33
Takker for point :^)
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