14. november 2011 - 12:47Der er
17 kommentarer og 2 løsninger
Relationer
Hvordan får jeg lavet en relation mellem to tabeller?
Har følgende fire tabeller: Tabel brugere: brugere_id, navn, brugernavn .... Tabel kommentar: kommentar_id, kommentar, klokken, Tabel Adresse: adresse_id, Adresse [DENNE TABEL VIL JEG IKKE BRUGE NU] Tabel: Foreign key til brugere_id og kommentar_id [RELATIONSTABEL]
Mit store spørgsmål er, hvordan man f.eks. kan lave en select, join forbindelse el.lign. til at en bestemt brugere_id skriver noget og kommentaren fra den bestemte person bliver vist??
Jeg anvender PhpMyAdmin og hvis jeg under "INSERT funktionen" indsætter data fra mine to andre tabeller, så vil den gerne lave en JOIN. Men det kan ikke passe at man skal hive data ind i relationstabellen manuelt?? Er det ikke netop derfor man laver en relationstabel, for at hive data ud på en nemmere måde?
(arne_v, jeg havde andetsteds aftalt med ny89 at deltage i tråden. Derfor blander jeg mig, skønt du er godt igang.)
ny89, må jeg spørge dig hvordan du bruger dine data. Jeg vil gætte på, at en bruger kan lave mange kommentarer, men at en kommentar kun kan komme fra en enkel bruger. Det vil aldrig kunne forekomme, at en kommentar er lavet af flere forskellige brugere, er det korrekt? I så fald har du en såkaldt en-til-mange relation mellem brugere og kommentarer. Det med de tre tabeller er normalt den rigtige løsning for mange-til-mange relationer, så som hvis det drejede sig om brugere og de aviser de læser. Hver bruger kan læse mange aviser og hver avis kan læses af mange brugere.
Under forudsætning af en en-til-mange relation vil jeg foreslå at skippe den tredje tabel og bruge to tabeller såsom:
bruger id navn o.s.v 1 Hans -- 2 Jens --
kommentar id brugerid datotid kommentar 1 1 '2011-11-11 12:13:14' 'Der var engang en mand' 2 2 '2011-11-12 13:14:15' 'Han boede i en spand' 3 2 '2011-11-12 16:17:18' 'Og spanden var af ler'
Så bruger1 har lavet en kommentar og bruger 2 har lavet to kommentarer.
Hvis du så vil have udskrevet navn, datotid, og alle kommentarer for bruger 2 siger du:
SELECT navn, datotid, kommentar FROM bruger JOIN kommentar ON bruger.id = kommentar.brugerid
Så skulle du få dette:
Jens 2011-11-12 13:14:15 Han boede i en spand Jens 2011-11-12 16:17:18 Og spanden var af ler
Det var ikke det du spurgte om, men muligvis kan det hjælpe dig i retning af det du behøver.
Spørger du hvorfor brugerid skal med i kommentar tabellen? Det er for at vide hvilken bruger der har lavet kommentaren. Eller mente du noget andet?
Så spørger du, hvordan man kan echo'e sætningen. Jamen så er vi ikke længere i mysql, så er vi ovre i applikationen som velsagtens er i php. Lad os antage, at du indretter tabellerne som foreslået i #13 og du på en php side vil have udskrevet det i #13, så kunne du gøre dette:
$result = mysql_query("SELECT navn, datotid, kommentar FROM bruger JOIN kommentar ON bruger.id = kommentar.brugerid WHERE navn = 'Jens'"); while($row = mysql_fetch_array($result)) echo $row['navn']." ".$['datotid']." ".$row['kommentar']."<br>";
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.