Avatar billede Lasse Novice
17. april 2001 - 15:41 Der er 22 kommentarer og
1 løsning

Hent samme data fra flere tabeller med samme kolonnenavne

Er der nogen der ved hvordan man henter fra flere tabeller, således at resultatet kommer som om man hentede fra en tabel? - det kræver vist en forklaring.

Lad os sige at vi har 3 tabeller i samme database- tabel1, tabel2 og tabel3. Hver af disse tabeller indeholder de samme slags kolonner som kaldes ID og navn. Nu vil jeg gerne hente alle de rækker fra de tre tabeller hvor ID = 3 f.eks. Men resultat \"tabellen\" må kun være 2 kolonner, og ikke 6 kolonner(de tre tabeller ved siden af hinanden). Er der nogen der ved hvordan man gør det?

P.s. Jeg kan ikke bruge svaret, at man kan gøre det én ad gangen. Ej heller at det ikke kan lade sig gøre, for det kan det - har jeg set.
Avatar billede limemedia Nybegynder
17. april 2001 - 15:45 #1
SELECT ta.ID AS taID, tb.ID AS tbID
FROM tabel1 ta, tabel2 tb
WHERE ta.ID = 3 && ta.ID=tb.ID
Avatar billede netsrac Praktikant
17. april 2001 - 15:47 #2
Skal && ikke være AND eller kan man bruge && i mySQL ?
Avatar billede defrost Nybegynder
17. april 2001 - 15:52 #3
Hvis tabellerne er ens og din mysql er af nyere dato ( > 3.23.25), så kan du oprette en \"merge-tabel\" over dine tre tabeller og lave en select ud fra den.
Avatar billede limemedia Nybegynder
17. april 2001 - 15:54 #4
netsrac >> mener du kan bruge && men bruger også ofte AND selv... går mere over til && i PHP da det er mere korrekt end AND
Avatar billede Lasse Novice
17. april 2001 - 15:55 #5
Det er ikke helt præcist det jeg søger...

Her er et eks.

tabel : las1
ID    navn
1    hmm1
2    hmm2
3    hmm3

tabel : las2
ID    navn
1    hmm4
2    hmm5
3    hmm6

så vil jeg gerne selektere dem som har id=2 f.eks så resultatet bliver således:

tabel : resultat
ID    navn
2    hmm2
2    hmm5

Avatar billede defrost Nybegynder
17. april 2001 - 15:57 #6
Den eneste måde at gøre det på i mysql er ved at benytte merge-tabeller. Men det kræver, at din mysql er ny nok til at understøtte det og at dine tabeller er ens.

Eller også må du vente på at mysql får support for unions.
Avatar billede Lasse Novice
17. april 2001 - 16:04 #7
hvordan gøres det med merge tabeller? tabellerne er FULDSTÆNDIG ENS... så det er i hvert fald ikke et problem
Avatar billede gizmo-gizmo Nybegynder
17. april 2001 - 16:04 #8
<?
$query = mysql_query (\"SELECT * FROM las1 WHERE id = \'2\'\");
$antal = mysql_fetch_array($query);

$query2 = mysql_query (\"SELECT * FROM last2 WHERE id = \'2\'\");
$antal2 = mysql_fetch_array($query2);

echo \"$antal[id]<br>$antal2[id]\";
?>

sådan kunne man jo også gøre *G*
Avatar billede gizmo-gizmo Nybegynder
17. april 2001 - 16:06 #9
i dit tilfælde:
echo \"$antal[navn]<br>$antal2[navn]\";
Avatar billede defrost Nybegynder
17. april 2001 - 16:07 #10
Hvis du har to tabeller som for oven, kan du udføre følgende

create table <tabelnavn> (ID int NOT NULL, navn varchar(255), key (ID)) type=merge union=(tabel1, tabel2, tabel3);

Se evt mere på http://www.mysql.com/doc/M/E/MERGE.html
Avatar billede Lasse Novice
17. april 2001 - 16:11 #11
ok, gizmo-gizmo.... har du læst det jeg skrev.... læs det lige en gang til tak...
Avatar billede gizmo-gizmo Nybegynder
17. april 2001 - 16:14 #12
ups!
jeg havde ellers læst det *S*.
hvorfor er det at du ikke vil have deti flere???
Avatar billede Lasse Novice
17. april 2001 - 16:21 #13
det tager ekstra tid....
Avatar billede Lasse Novice
17. april 2001 - 16:26 #14
det er fordi jeg skal drive det udfra 20 forskellige tabeller som alle er ens...

jeg kan se at det vil skabe problemer med merge nu... pis... andre ideer? jeg har flere point
Avatar billede defrost Nybegynder
17. april 2001 - 16:29 #15
*bum-bum*

Ikke umiddelbart... Hvad er problemet med merge-tabeller?
Avatar billede Lasse Novice
17. april 2001 - 16:30 #16
merge får problemer med mange tabeller, da der åbnes mange fildeskreptorer pr. tabel. Det kan blive et kæmpe problem
Avatar billede Lasse Novice
17. april 2001 - 16:32 #17
MERGE tables uses more file descriptors. If you are using a MERGE that maps over 10 tables and 10 users are using this, you are using 10*10 + 10 file
    descriptors. (10 data files for 10 users and 10 shared index files.)
Avatar billede defrost Nybegynder
17. april 2001 - 16:36 #18
En merge-tabel er hurtig at oprette, så du kan oprette den \"on demand\" og nedlægge den igen bagefter.
Avatar billede Lasse Novice
17. april 2001 - 16:43 #19
ja, det er der selvfølgelig noget om... men er vi 10 brugere på, og der er f.eks. 20 tabeller, så skal jeg bruge 210 fildeskreptorer... jeg ved ikke hvad unix\' loft er... men det kan da blive et problem.

Jeg er også rimelig sikkert på at der kommer flere end 20 tabeller  - måske 50....
Avatar billede defrost Nybegynder
17. april 2001 - 16:45 #20
I er 10 brugere på siger du. Men er der også 10 brugere, der benytter den merge-tabel samtidig?

Jeg går stærkt ud fra, at mysql slipper sine filedescriptors efter en query er udført. Så spørgsmålet er vel om du udfører 10 queries på den samtidigt?
Avatar billede Lasse Novice
17. april 2001 - 16:55 #21
ja, det er selvfølgelig et spg. om hvorvidt de er på samtidig. 10 personer samtidig er sku nok lidt overilet, men det er et potientielt problem.

Alle brugere der er på, skal merge den tabel sammen, men det går ikke at lægge tabellerne sammen. Derfor skal de merges sammen hver gang, og det er ikke utænkeligt at der er 10 personer på serveren samtidig. hmm, det er noget rigtigt lort :-()
Avatar billede defrost Nybegynder
17. april 2001 - 17:38 #22
Du kan eventuelt prøve at kigge på dette:

http://www.mysql.com/doc/N/o/Not_enough_file_handles.html
Avatar billede Lasse Novice
17. april 2001 - 18:00 #23
tak, du har været meget behjælpelig... mange tak
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