06. november 2005 - 18:17Der er
16 kommentarer og 1 løsning
Identificere tabeller
Jeg har 4 tabeller, der hver repræsenter en kalender over arrangementer. På min webside, viser jeg date og title for de 3 nyeste arrangementer fra alle tabeller sådan:
SELECT date, title FROM a UNION SELECT $rows FROM b UNION SELECT $rows FROM c UNION SELECT $rows FROM d ORDER BY date DESC LIMIT 0,3;
Når jeg klikker på et arrangementer, skal beskrivelsen for det vises på siden. Indtil nu har jeg lavet det her:
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
Du kan tilføje noget statisk info, f.eks. SELECT 'tabel1' as tabelnavn FROM tabel UNION SELECT 'tabel2' as tabelnavn etc. Så har du nu $row['tabelnavn'].
Jeg kan ikke helt forstå hvad det skal gøre det du lige skrev. Men i dit hovedudtræk kan du jo trække ud, som jeg skrev, så du ved hvor dataene kommer fra.
Denne del: 'tabel1' as tabelnavn vil nærmest oprette et felt der ikke er der, altså et virtuelt felt om man så må sige.
Det vil give dit array $row en $row['tabelnavn'] der vil indeholder "tabel1", "tabel2", "tabel3" osv. - eller hvad du vil, du kan også skrive navnet på tabellen hvis du hellere vil det. Men så kan du jo se hvor dataene kommer fra.
Jeg er ikke 100% med, så derfor viser jeg dig lige det her: SELECT 'tabel1' as tabelnavn FROM kalender1 UNION SELECT 'tabel2' as tabelnavn FROM kalender2; Har jeg så et $row array, der indeholder begge tabeller, og hvordan udtrækker jeg så bestemte informationer?
Du må gerne udpensle lidt, hvad du mener med en "tilføjelse". Skal det du har skrevet flettes ind i det jeg allerede har, eller skal det være to seperate SQL sætningner? $rows er date og title.
SELECT date, title, 'tabel_a' as tabelnavn FROM a UNION SELECT $rows FROM b UNION SELECT $rows, 'tabel_c' as tabelnavn FROM c UNION SELECT $rows, 'tabel_d' as tabelnavn FROM d ORDER BY date DESC LIMIT 0,3;
Så vil du nu have $row['date'], $row['title'] og $row['tabelnavn']. Bedre :) ?
Det var bedre, men jeg kan se, at alle tabeller skal have lige mange kolonner. Det har mine ikke, for det er forskellige informationer der er behov for. Skal jeg så bare oprette nogle tomme kolonner, eller er der en måde at komme uden om det på?
Jeg har lige et lille spørgsmål vedr. ovenstående. Jeg vil gerne tilknytte en postnr/by tabel til tabel 'a', men jeg får problemer, fordi antallet af forspurgte kolonner bliver forskelligt fra tabel a til b, c og d. Jeg vil gerne høre, hvad jeg gør for at få det til at passe. Tabellerne indholder ikke sammeantal kolonner. Her er det jeg har prøvet med: SELECT date, title, by 'tabel_a' as tabelnavn FROM a, postnr WHERE a.postnr=by.postnr UNION SELECT date, title, 'tabel_b' as tabelnavn ...
Jeg er ret sikker på, at det kan du ikke. Det skal være samme antal felter og samme felt-typer. Men du kan da selv se her, måske du bliver klogere: http://dev.mysql.com/doc/refman/5.0/en/union.html
Dog har du også et par syntaxfejl i den forespørgsel du har skrevet, men den er måske bare hurtigt skrevet?
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.