Ik zie hier op CP vaak hele slechte scripts met rampzalige MySQL databases erachter. Een groot deel van de load op de server wordt veroorzaakt door deze query's, en het leek mij dus handig hier wat meer informatie over te geven.
Laten we even van een database uitgaan waarin de volgende gegevens staan:
Tabel Gebruikers:
- gebruiker_id
- gebruiker_naam
- gebruiker_password
- gebruiker_rank
Tabel Auto:
- auto_id
- auto_type
- auto_schade
- auto_eigenaar
Hoe maak je dit in MySQL; Ik laat hier een paar extra commando's achterwege om het begrijpelijk te houden, misschien maak ik daar later nog een topic over.
De create statements:
CREATE table Gebruikers (
gebruiker_id INT(10) AUTO_INCREMENT,
gebruiker_naam VARCHAR(20) NOT NULL,
gebruiker_password VARCHAR(50) NOT NULL,
gebruiker_rank ENUM('Rank1','Rank2','Rank3') DEFAULT 'Rank1' NOT NULL,
PRIMARY KEY (gebruiker_id)
)
CREATE table Auto (
auto_id INT(10) AUTO_INCREMENT,
auto_type INT(3) NOT NULL,
auto_schade INT(2) NOT NULL,
auto_eigenaar INT(10) NOT NULL,
PRIMARY KEY (auto_id),
FOREIGN KEY (auto_eigenaar)
REFERENCES Gebruikers
)
Toon Meer
LET OP: auto_eigenaar is een INTEGER (getal), we slaan expres NIET te gebruikersnaam op in Auto, aangezien het op deze manier sneller is en ook handiger: Als je immers een gebruikersnaam wilt wijzigen hoef je niet alle auto's van deze gebruiker up te daten. Voor de duidelijkheid: auto_eigenaar refereert dus naar gebruiker_id en niet naar gebruiker_naam.
Normaal gezien zou je dus ook nog een tabel met auto types hebben en daar dus ook een foreign key naartoe. Natuurlijk zou je ook in PHP een SWITCH kunnen maken, maar als je later een auto wilt toevoegen of wijzigen is dit vele malen makkelijker: Je kunt deze optie nu zelfs in je Administrator/Moderator paneel zetten.
Hoe maak je nou een lijst met auto's en de daarbijbehorende eigenaarsNAAM (en dus niet ID zoals in Tabel Auto staat)?
Nou gewoon zo:
$query = mysql_query("
SELECT a.auto_type,a.auto_schade,g.gebruiker_naam FROM Auto a
LEFT JOIN Gebruikers g
ON a.auto_eigenaar = g.gebruiker_id
");
Door middel van een WHILE kan je makkelijk een lijst van auto's weergeven in PHP: