20. oktober 2003 - 20:36Der 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?
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
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.
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.
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.
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.