Avatar billede musiat Nybegynder
20. oktober 2003 - 20:36 Der er 7 kommentarer og
1 løsning

Udtræk fra to tabeller i MySQL-database - part 2

Har uden held forsøgt at forhøre mig rundt omkring, om hvordan jeg kan lave et db-udtræk (MySQL) fra 2 eller flere tabeller samtidig, og så sortere dem efter sidste uploadede post i alle tabellerne.

Tabellerne har ikke noget med hinanden at gøre, desværre har de også nogle enslydende felter: id, dato, overskrift o.s.v.

Jeg har forgæves forsøgt at få det til at fungere med denne streng:

SELECT tabel1.*,tabel2.* FROM tabel1, tabel2 ORDER BY tabel1.dato DESC LIMIT 0,3

- men den tog for lang tid, og jeg kunne ikke få den til at returnere de seneste tre opdateringer.

Har også brugt JOINT og UNION, men virkede enten ikke eller gav nogle ret mærkelige resultater.

Jeg har taget i betragtning at jeg skal bruge mysql_fetch_row i de sidste tilfælde.

Kan det virkelig passe, at man ikke kan lave "seneste nyt" fra to forskellige tabeller?
Avatar billede tfa_dk Nybegynder
20. oktober 2003 - 21:54 #1
Som man spørger får man (måske) svar. Jeg har læst dit spørgsmål flere gange under forskellige numre og når til dette resultat:

Du har flere tabeller som IKKE har noget med hinanden at gøre men de har 3 TING TIL FÆLDES nemlig uploaded en tidsstempling, et record id (måske en primær nøgle eller noget andet der kan beregnes til at være entydigt) og et tabelnavn.

Løsning: Lav en UNION hvor du fra hver tabel kun henter tidsstempling, record id, og en konstant med tabellens navn (eller anden kode du finder på).

Dette giver et resultatsæt som den kode der løber sættet i gennem kan behandle ud fra tabellens navn.

eks:

select stempling, counter, "Type 1" from table1
union
select klokkeslet, RecID, "Type 2" from table2;


Kode:

      hent post fra recordset til stempling, RecID, RecordType
      switch (RecordType)
        case "Type 1" hent postfra table1 med RecId som nøgle;
                      gør noget med posten;
                      break;
        case "Type 2" hent postfra table2 med RecId som nøgle;
                      gør noget med posten;
                      break;
      endswitch


Alternativt kan du læse top 10 fra tabellerne og putte deres recId i en temp tabel og så bruge temp tabellen at løbe igennem.
Avatar billede musiat Nybegynder
21. oktober 2003 - 11:40 #2
Ups - har lige opdaget at der kun er installeret MySQL version 3.23 et eller andet på min udbyders server. Og UNION virker jo kun med 4'eren, ik?

Jeg prøver med dit andet forslag...
Avatar billede musiat Nybegynder
21. oktober 2003 - 11:42 #3
Hvordan vil man putte recID (eller et andet felt) fra flere tabeller ind i én tabel?
Avatar billede tfa_dk Nybegynder
21. oktober 2003 - 14:43 #4
Opret en ny tabel (TempTable) med 3 felter, Timestamp, RecId, RecType.

lav en sql forespørgsel der kan tømme tabellen: delete * from TempTable;
lav en sql forespørgsel pr. 'datakilde' du have med i dit resultatsæt: insert into .... (Jeg kan ikke syntaksen for mysql men den kan nok finde i et andet spørgsmål)

Nu har du en tabel med nogle data der kan arbejdes vidre på i din kode.

Hvis koden skal køres pr. klient skal du tilføje et felt mere i TempTabel nemlig SessionId og så slette og indsætte med dette.
Avatar billede tfa_dk Nybegynder
21. oktober 2003 - 14:45 #5
Glemte lige at skrive at du selvfølgelig skal slette TempTabel EFTER du har brugt data hvis du indføre SessionId da antal rækker ellers vil vokse .... vildt.
Avatar billede musiat Nybegynder
22. oktober 2003 - 09:57 #6
WOW - det virker sgu! Mange tak for hjælpen:-)

Du skal vist lige nogle point, men jeg kan ikke tilføje dem
Avatar billede tfa_dk Nybegynder
22. oktober 2003 - 10:14 #7
Det kan du nu. Altid rart når man kan få beskrevet ens ideer så de kan bruges (uden at skulle gøre arbejdet).
Avatar billede musiat Nybegynder
22. oktober 2003 - 13:31 #8
Jeg synes din forklaring var alle tiders:-)
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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

IT-JOB

BEC Financial Technologies

Development Manager for Core Banking

Capgemini Danmark A/S

AI/Data Engineer

Politiets Efterretningstjeneste

Sektionsleder til dataplatform i PET

Capgemini Danmark A/S

Java Engineer