Avatar billede thorus Nybegynder
13. oktober 2003 - 14:31 Der er 9 kommentarer og
1 løsning

Select flere tabeller where

Jeg har en del tabeller som bruges til et forum, tabellerne hedder eks. motocross,surfing,klatring i de forskellige tabeller er der de samme felter men der er bare forskellgei indhold.

Jeg skal lave en liste som giver mig de 10 nyeste forum indlæg fra alle tabellerne i et udtræk.
Avatar billede solja Nybegynder
13. oktober 2003 - 14:38 #1
Hvorfor har du ikke alt i én tabel, da det jo er samme felter i alle tabellerne aligevel, så ville det være meget lettere.
Avatar billede ldanielsen Nybegynder
13. oktober 2003 - 14:39 #2
Du skal placere ALLE indlæg i den samme tabel. Og så skal der være et ForumID i Indlaeg-tabellen der viser hvilket forum det drejer sig om.

Så bliver det meget let at lave omtalte udtræk
Avatar billede arne_v Ekspert
13. oktober 2003 - 14:40 #3
1)

Forkert tabel-struktur.

En enkelt tabel og et felt med type var meget bedre.

2)

(SELECT * FROM motorcross)
UNION
(SELECT * FROM surfing)
UNION
(SELECT * FROM klatring)
ORDER BY datofelt DESC
Avatar billede arne_v Ekspert
13. oktober 2003 - 14:41 #4
Hov.

Der skal nok lige en LIMIT 10 på også for kun at få de 10 nyeste.
Avatar billede thorus Nybegynder
13. oktober 2003 - 14:50 #5
Der er bare et problem. såvidt jeg ved så er UNION først tilgænligt fra version 4.0 jeg glemte lige at skrive jeg kun har verison mysql 3.23.49
Avatar billede arne_v Ekspert
13. oktober 2003 - 14:57 #6
Av.

Så tror jeg at mulighederne i SQL er sluppet op.

Enten må du ændre tabel strukturen som beskrevet.

Eller flytte logikken fra databasen til din applikation.
Avatar billede arne_v Ekspert
13. oktober 2003 - 14:58 #7
Altså lade din applikation hente de 10 nyeste fra alle tabellerne ind i
et array og så sortere det og tage de 10 nyeste.
Avatar billede thorus Nybegynder
13. oktober 2003 - 15:03 #8
ellers små jeg lige få mit webhotel til at ligge den nye version på.
Avatar billede Slettet bruger
14. oktober 2003 - 13:56 #9
Det er muligt ved brug af en TEMPORARY TABLE (fra version 3.23).

Jeg har lavet en lille demo  :-)

Opret tabellerne:
--------------

create table moto (A int, B int);
create table surf (A int, B int);
create table klat (A int, B int);

insert into moto values(1, 1);
insert into moto values(1, 2);
insert into moto values(1, 3);

insert into surf values(2, 1);
insert into surf values(2, 2);
insert into surf values(2, 3);

insert into klat values(3, 1);
insert into klat values(3, 2);
insert into klat values(3, 3);


Og for at samle tabellerne...
---------------------------------------
CREATE TEMPORARY TABLE tmp (tmp_A int, tmp_B int);
INSERT INTO tmp SELECT * FROM klat;
INSERT INTO tmp SELECT * FROM surf;
INSERT INTO tmp SELECT * FROM moto;
SELECT * FROM tmp ORDER BY tmp_A;
DROP TABLE tmp;

-----------------

Derudover er jeg enig med de andre i at det burde ligge i én tabel med en
type_id eller forum_id på.
Avatar billede arne_v Ekspert
25. oktober 2003 - 14:01 #10
Tid at afslutte spørgsmålet ?
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