login  Naam:   Wachtwoord: 
Registreer je!
 Tutorials

Tutorials > MySQL


Gegevens:
Geschreven door:
Wim
Moeilijkheidsgraad:
Normaal
Hits:
12837
Punten:
Aantal punten:
 (2.4)
Aantal stemmen:
5
Stem:
Niet ingelogd
Nota's:
 Lees de nota's (4)
 



Tutorial:

Complexe tabellen (koppelingen)

1. Inleiding: Complexe database
2. De tabellen
3. De koppelingen uitgelegd
4. Gegevens ophalen

1. Inleiding: Complexe database

Zeer veel mensen maken de dag van vandaag gebruik van een MySQL database als het op PHP scripting aankomt. Echter wijnige maken een overzichtelijke, snelle, en complexe database. In deze tutorial gaan we een paar voorbeelden bekijken hoe het allemaal net iets flexibeler kan, en niet hard-coded in je scripting :-)

Alle broncodes en tabellen die gebruikt worden komen van PartyCore.BE! De (fragmenten) source-code worden hier als voorbeeld gegeven. Het mocht vriendelijk zijn als u niet alles ging lopen kopiëren.
In deze tutorial gaan we gebruik maken van de Kalender van PartyCore.BE!. Volgende tabellen horen bij de kalender: DJ's, muziek genres (DJ's EN fuiven krijgen hiervan genres toegewezen), fuiven, koppeling tussen DJ's en fuiven, koppeling tussen genres en fuiven. De koppeling tussen DJ's en genres is gemaakt om meer info over een DJ te kunnen weergeven.

mysql_real_escape_string() is overal verwijderd om alles wat overzichtelijk te houden :-)

pijl top
2. De tabellen

DJ's (slechts 3 weergegeven)
ID DJ Website Notes
1 Dark-E http://www.dark-e.net/  
2 Ruben http://www.technoindustries.be/  
3 Coone http://www.djcoone.com/  

Genres
ID Genre
1 Jumpstyle
2 Hardstyle
3 Techno

Fuiven
ID Party Location vvk Inkom website note timestamp
1 Fuif 1 tent asberg, retie 3 4   Gratis inkom voor 22h  
2 Fuif 2 @ gdx's home 2 3   Private :p  

Koppeling: DJ's - genres
ID DJ Genre
1 1 1
2 1 2
3 2 1
4 2 2
5 2 3
6 3 1
7 3 2
7 3 3


Koppeling: Fuiven - genres
ID Fuif Genre
1 1 1
2 2 2
3 2 3


pijl top
3. De koppelingen uitgelegd

Zoals je ziet zijn er 2 tabellen (de koppelingstabellen) die je in andere scripts niet veel tegenkomt (een voorbeeld waar dit soort tables wel gebruikt wordt: PHPBB!!!). Deze tabellen dienen om 2 andere tabellen aan elkaar te 'koppelen'.
Een voorbeeld: Op de fuif met ID=1 wordt van muziekgenres enkel het genre met ID=1 gespeeld. We zullen in de koppeling 'Fuiven - genres' een nieuwe rij aanmaken: De fuif en het genre. Bij beide vullen we gewoon het UNIEKE (primary) id in. 1 en 1 dus.
Tot hier kunnen we alles ook nog zonder de koppeling. Maar wat als er meer genres worden gespeeld, zoals op de fuif met ID=2? Met deze records zal de fuif met ID=2 de genres met ID=2 en ID=3 toegewezen krijgen. Zo kunnen er onijndig records toegevoegd worden, zonder het script vast gaat hangen.

Uiteraard kan je alles ook met een , "komma" schijden in een veld. Dit is echter zeer onhandig om te zoeken of om berekeningen op te doen.

pijl top
4. Gegevens ophalen

Met PHP kunnen we deze gegevens makkelijk ophalen. Een voorbeeldje:
<?php
$query = $mysql->query("SELECT dj FROM ".PREFIX."partydjs WHERE party='".$party->id."'");
while ($djs = $mysql->fetchobject($query)) {
       $query2 = $mysql->query("SELECT dj FROM ".PREFIX."djs WHERE id='".$djs->dj."' LIMIT 1");
       $dj = $mysql->fetchobject($query2);
       $tpl->newBlock('dj');
       $tpl->assign(array(
             'djid' => $djs->dj, // deze template var krijgt het ID van de dj
             'dj' => $dj->dj //deze template var krijgt de dj
       ));
}

$query = $mysql->query("SELECT genre FROM ".PREFIX."partymusicgenres WHERE party='".$party->id."'");
while ($genre = $mysql->fetchobject($query)) {
       $query2 = $mysql->query("SELECT genre FROM ".PREFIX."muziekgenres WHERE id='".$genre->genre."'");
       $genre = $mysql->fetchobject($query2);
       $tpl->newBlock('genre');
       $tpl->assign('genre', $genre->genre); //deze template var zal het genre krijgen
}
?>


Deze regels code zullen de template variabelen aanpassen. $djs->dj heeft het ID van de dj, $dj->dj heeft de naam van de DJ en $genre->genre heeft het genre.

Op deze manier kunnen we dus makkelijk een genre voor ELK record met 1 wijziging wijzigen. Ook is het mogelijk om makkelijk meerdere gegevens te koppelen, en bovendien is het handiger om een layout op te maken (weg met exploit(), str_replace(), ...)

Hopelijk heb je er iets aan, opmerkingen/aanvullingen zijn altijd welkom!
Wim Mariën

pijl top

« Vorige tutorial : Gereserveerde woorden Volgende tutorial : Datum en tijd in MySQL [deel 1] »

© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.015s