database:
tabel kleuren
id > kleur
1 > 'geel'
2 > 'groen'
3 > 'blauw'
tabel autos
id > auto
1 > 'auto1'
2 > 'auto2'
3 > 'auto3'
tabel auto_kleur
auto_id > kleur_id
1 > 1
1 > 2
1 > 3
2 > 3
dus 1 lijst met kleuren
1 lijst met auto's
en een koppeltabel om de auto's en kleuren te koppelen.
Dat opent ook de mogelijkheid dat de kleur geel niet alleen voor auto1, maar ook voor een andere auto gebruikt kan worden
Link gekopieerd
Ivo je bedoelt MySQL joinen?
Link gekopieerd
SELECT autos.auto, kleuren.kleur
FROM autos
JOIN auto_kleur ak ON ak.auto_id = autos.id
JOIN kleuren ON kleuren.id = ak.kleur_id
Link gekopieerd
Dank je Ivo, maar hoe zit het nu met die array.
Kan ik zoiets doen:
array [auto] [kleuren] =
[auto1][geel, groen, blauw]
[auto2][oranje]
[auto3][paars, rood, zwart]
Link gekopieerd
<?php
$aArray = array(); // leeg array klaar zetten
// voer query uit
while($row = xxx_fetch()) { // fetch van jouw keuze
$aArray[$row->auto][] = $row->kleur;
}
var_dump($aArray);
?>
Link gekopieerd
Gewoon print_r gebruiken of var_dump zoals ivo al aangaf om die arrays te bestuderen. Ik denk dat dat wel heel belangrijk is om het te leren.
<?php
// array van auto's
$cars = array(
// associatieve array met kenmerken van één auto
array(
'id' => 1,
'brand' => 'Volvo',
// array met kleuren
'colors' => array(
'geel',
'groen',
'blauw'
),
),
array(
'id' => 2,
'brand' => 'BMW',
'colors' => array(
'wit'
),
),
);
foreach($cars as $car)
{
echo $car['brand'] . " leverbaar in de kleuren:\n";
foreach($car['colors'] as $color)
{
echo $color . "\n";
}
}
?>
[size=xsmall]
Toevoeging op 01/07/2015 11:44:04: [/size]
Dit kan dus met arrays maar met een database is het anders. In de database moet je gewoon gaan opsplitsen in verschillende tabellen.
Je hebt in ieder geval een tabel cars nodig en een tabel colors. Dan zou ik kiezen voor een koppeltabel.
tabel colors:
(color_id, color)
- 1, wit
- 2, groen
- 3, geel
- 4, blauw
tabel cars:
(car_id, brand)
- 1, Volvo
- 2, BMW
tabel cars_colors:
(car_id, color_id)
1, 3
1, 2
1, 4
2, 1
Om die kleuren weg te schrijven gewoon weer de foreach gebruiken als in bovenstaand voorbeeld:
<?php
foreach($cars as $car)
{
foreach($car['colors'] as $color)
{
// INSERT INTO cars_colors (car_id, color_id) VALUES ($car['car_id'], $color['color_id'])
}
}
?>
Het probleem komt bij het selecteren:
SELECT
ca.car_id, ca.brand, co.color
FROM
cars ca
JOIN
cars_colors cc
ON
ca.car_id=cc.car_id
JOIN
colors co
ON
cc.color_id=co.color_id
levert op:
<?php
array(
array(
'car_id' => 1,
'brand' => 'Volvo',
'color' => 'geel',
),
),
array(
'car_id' => 1,
'brand' => 'Volvo',
'color' => 'groen',
),
),
array(
'car_id' => 1,
'brand' => 'Volvo',
'color' => 'blauw',
),
),
array(
'car_id' => 2,
'brand' => 'BMW',
'color' => 'wit',
),
),
)
?>
dan moet je dat ALS JE DAT WILT zelf omzetten naar een multi array:
<?php
$cars = array();
while($row = mysqli_fetch_assoc())
{
$cars[$row['car_id']]['brand'] = $row['brand'];
$cars[$row['car_id']]['colors'][] = $row['color']; // let op de extra []
}
echo '<pre>';
print_r($cars);
?>
Link gekopieerd
Ivo P op 30/06/2015 04:46:35
SELECT autos.auto, kleuren.kleur
FROM autos
JOIN auto_kleur ak ON ak.auto_id = autos.id
JOIN kleuren ON kleuren.id = ak.kleur_id
Ik denk dat je ak bent vergeten: JOIN kleuren ON kleuren.id = ak.kleur_id (JOIN kleuren ak ON kleuren.id = ak.kleur_id)
Link gekopieerd
Wauw! geweldig. Ik ga hiermee aan de slag. Ik moet nog zoveel leren.
Dank.
Link gekopieerd
@Johan
Nee toch?
Of snap ik gewoon niet wat je bedoelt?
Link gekopieerd
Ik weet het niet zeker dus vandaar dat ik naar vroeg hahaha jij weet zowiezo beter dan mij.
Ik dacht dat
JOIN kleuren ON kleuren.id = ak.kleur_id moest zijn
JOIN kleuren ak ON kleuren.id = ak.kleur_id
Link gekopieerd