Avatar billede jsl Nybegynder
06. november 2005 - 18:17 Der 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:

echo "<a href=index.php?show=kalender.php&id=$row[id]>";
echo $row[date];
echo "</a>";

Problemet er, at jeg også skal vide, hvilken tabel det pågældende id tilhører. Hvordan kan jeg vide det?
Avatar billede jsl Nybegynder
06. november 2005 - 18:19 #1
$rows skal naturligved være date, title ved alle selects.
Avatar billede jaw Nybegynder
06. november 2005 - 18:48 #2
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'].
Avatar billede jsl Nybegynder
06. november 2005 - 19:07 #3
Sku' det være sådan her? Den leder vel bare efter række 'a' i tabellerne, og den findes ikke.

SELECT $rows FROM event_speech_institute as a ...;
echo "<a href=index.php?show=kalender.php&table=";
echo $row['a']."></a>";
Avatar billede jaw Nybegynder
06. november 2005 - 19:09 #4
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.
Avatar billede jsl Nybegynder
06. november 2005 - 19:12 #5
Men hvad er så "tabel" i dit udtryk mellem FROM og UNION?
Avatar billede jaw Nybegynder
06. november 2005 - 19:14 #6
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.
Avatar billede jsl Nybegynder
06. november 2005 - 19:33 #7
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?
Avatar billede jaw Nybegynder
06. november 2005 - 19:36 #8
Ikke helt. Det er kun en tilføjelse til de felter du hev ud originalt, altså dato, title og hvad end $rows indeholder. Altså kun en tilføjelse.
Avatar billede jsl Nybegynder
06. november 2005 - 19:44 #9
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.
Avatar billede jaw Nybegynder
06. november 2005 - 19:46 #10
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 :) ?
Avatar billede jsl Nybegynder
06. november 2005 - 20:13 #11
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å?
Avatar billede jsl Nybegynder
06. november 2005 - 20:18 #12
Så fandt jeg ud af det. Der manglede en table_b. Det virker nu. Svar så du kan få point.
Avatar billede jaw Nybegynder
06. november 2005 - 20:34 #13
Svar :)
Avatar billede jsl Nybegynder
06. november 2005 - 20:37 #14
Tak for hjælpen. Det er nok den mest avanceret SQL sætning jeg har i min kode :)
Avatar billede jsl Nybegynder
08. november 2005 - 10:00 #15
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 ...
Avatar billede jaw Nybegynder
08. november 2005 - 11:25 #16
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?
Avatar billede jsl Nybegynder
08. november 2005 - 11:35 #17
Jeg tænkte det nok, så det må jeg finde ud af.
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