Ik ben nu eindelijk mijn database aan het normaliseren, alleen stuit op het volgende probleem. Er zijn 2 tabellen:

tabel1:

+----+----------+
| id | kleur    |
+----+----------+
|  1 | Rood     |
|  2 | Geel     |
|  3 | Groen    |
+----+----------+

en tabel2:

+----+----------+----------+
| id | merk     | kleur_id |
+----+----------+----------+
|  1 | Toyota   | 1        |
|  2 | Nissan   | 2, 3     |
|  3 | Mazda    | 1, 3     |
+----+----------+----------+

Nu dienen deze tabellen natuurlijk dmv JOIN opgehaald te worden. Het probleem is dat de auto's meerder kleuren kunnen hebben, anders was het een simpele JOIN als:

SELECT
    2.merk,
    1.kleur,
FROM
    tabel1 AS 1
INNER JOIN
    kleuren AS 2
        ON 2.id = 1.kleur_id

Maar hoe moet ik deze tabellen nu joinen?
Robert_Deiman schreef op 17.07.2008 09:57
Misschien heb je hier wat aan?

Ja, maar ook daarmee kom ik er niet uit. Ik heb het volgende:

<?php
	$teamkleuren = "SELECT
				1.naam,
				2.kleur_naam
			FROM
				tabel1 AS 1
			INNER JOIN
				(tabel2 AS 2
					INNER JOIN
						koppeltabel AS kt
					ON
						kt.kleur_id = 2.id
				)
			ON
				kt.team_id = 1.id
			";
?>

en ik krijg "Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource". Oftewel, de query is niet goed, maar wat doe ik fout?
Iemand die me hiermee kan helpen, want ben er nog steeds niet uit?
Tja, je mag geen aliassen aanmaken welke met een nummertje beginnen


SELECT
   table1.naam,
   table2.kleur_naam
FROM
    table1 
   INNER JOIN koppeltabel
           ON table1.id=koppeltabel.team_id
   INNER JOIN table2
           ON koppeltabel.kleur_id=table2.id
Oftewel, de query is niet goed, maar wat doe ik fout?
Zou je dan voortaan niet even de mysql foutmelding ook echoën? Gebruik mysql_error() om die foutmelding op te halen als blijkt dat een query mislukt is...
Noppes schreef op 20.07.2008 20:26
Tja, je mag geen aliassen aanmaken welke met een nummertje beginnen


Oke thanx!

Ik heb nu:

<?php
	$teamkleuren = "SELECT
				tabel1.naam,
				tabel2.kleur_naam
			FROM
				tabel1
			INNER JOIN
				(tabel2
					INNER JOIN
						koppeltabel AS kt
					ON
						kt.kleur_id = tabel2.id
				)
			ON
				kt.team_id = tabel1.id
			";
?>

En dat werkt.
Als ik vervolgens de resultaten weergeef in een tabel dmv

<?php
	while ($row = mysql_fetch_array($teamkleuren));
?>

dan krijg ik het volgende:

+---------+----------+
| team    |  kleuren |
+---------+----------+
| Toyota  |  Rood    |
| Nissan  |  Geel    |
| Nissan  |  Groen   |
| Mazda   |  Rood    |
| Mazda   |  Groen   |
+---------+----------+ 

Dit klopt, maar ik wil het nu zo weergeven:

Toyota: Rood
Nissan: Geel Groen
Mazda: Rood Groen

maar krijg ook dit weer niet voor elkaar :(

Ps: dat normaliseren van mijn database maakt t me niet echt makkelijker
@KrisKross

Maar het voorkomt in de toekomst wel fouten. Laat met PHP iets meelopen die bepaald of het automerk nog hetzelfde is:

<?php
$last_car = '';
while($row=mysql_fetch_assoc($result)){
if($last_car == $row['team']){
//komt overeen, dus nog geen nieuwe regel aanmaken alleen kleur invullen
echo ' '.$row['kleur'];
}
else{
//nieuw team, dus nieuwe regel
echo '<br />'.$row['team'].':';
}
}
?>
@ Robert

Ja, maar in mijn echte database kan mijn team meerdere kleuren, sponsors en rijders hebben :|
Dat is imho bijna niet te doen met if-jes.
Mijn oplossing tot nu toe is voor elke variabele een

<?php
while($row=mysql_fetch_assoc($result))
?>

draaien en dan de array elke keer resetten. Maar dit is niet echt een elegante oplossing...

Reageren