Foreign keys omzetten
we moeten voor school een project maken waar we een site maken voor een pizzaria,
in mijn database staat een tabel met de pizza's met pizzanummer, ingredientnummer, naam vd pizza en de prijs.
De ingredientnummers komen uit een andere tabel, waar die nummers staat met de naam van het ingredient.
Nu loop ik vast op het stuk waar ik het menu maak, waar de informatie uit de pizza-tabel komt, waar hij dat als ingredienten al die nummers weergeeft.
Is er een manier om deze nummers om te zetten naar de namen uit de ingredienten tabel?
Alvast bedankt :)
Code (php)
1
2
3
4
2
3
4
SELECT a.pizza_name, b.ingredient_name
FROM pizzas a
LEFT JOIN ingredients b ON a.ingredient_id = b.ingredient_id
WHERE a.pizza_id = 1
FROM pizzas a
LEFT JOIN ingredients b ON a.ingredient_id = b.ingredient_id
WHERE a.pizza_id = 1
Uiteraard zijn de tabel/kolom namen compleet verzonnen, maar ik hoop dat je de structuur begrijpt
Je hebt toch niet alle ingredienten in een kolom staan hoop ik....
1 pizza kan meerdere ingrediënten bevattten
en in beide gevallen weet je niet hoeveel links er kunnen zijn.
Je hebt dus een koppeltabel nodig.
Noem die bv. pizza_samenstelling (voel je vrij om dat anders te noemen)
In pizza_samenstelling heb je de velden id, pizzanummer, ingredientnummer
Om 1 pizza calzone samen te stellen, doe je iets als dit:
Code (php)
1
2
3
4
5
2
3
4
5
SELECT pizza.naam as pizza, ingredient.naam as ingredient
FROM pizza_samenstelling
INNER JOIN pizza ON pizza_samenstelling.pizzanummer = pizza.id
INNER JOIN ingredient ON pizza_samenstelling.ingredientnummer = ingredient.id
WHERE pizza.naam = "calzone"
FROM pizza_samenstelling
INNER JOIN pizza ON pizza_samenstelling.pizzanummer = pizza.id
INNER JOIN ingredient ON pizza_samenstelling.ingredientnummer = ingredient.id
WHERE pizza.naam = "calzone"
Dat geeft dus een aantal records; 1 per ingrediënt
Iemand anders had mij dit gestuurd:
$sql = "SELECT * FROM Ingredienten";
$result = $db->query($sql);
$row = $result->fetch();
$ingredient[$row['ingredientnr']] = htmlentities($row['naam']);
Wat ook nog niet werkt, maar misschien weten jullie of hier een fout in zit, of dat het überhaupt niet werkt?
Als dat niet lukt, laat eens zien dan wat je hebt. Toon de tabel structuur en het SQL statement dat je probeert.
De tabel Pizza:
De tabel Ingredienten:
(een deel van) De tabel pizza_samenstelling:
Ik heb meerdere sql queries geprobeerd, meest recente was:
SELECT Pizza.*, Ingredienten.ingredient
FROM pizza_samenstelling, Pizza
ORDER BY Pizza.pizzanr
INNER JOIN Pizza.naam ON pizza_samenstelling.pizzanr = Pizza.pizzanr
INNER JOIN Ingredienten.ingredient ON pizza_samenstelling.ingredientnr
Code (php)
1
2
3
4
2
3
4
SELECT pizza.prijs, pizza.naam, ingredienten.ingredient
FROM pizza_samenstelling
INNER JOIN pizza ON pizza_samenstelling.pizzanr = Pizza.pizzanr
INNER JOIN Ingredienten ON pizza_samenstelling.ingredientnr = Ingredienten.ingredientnr;
FROM pizza_samenstelling
INNER JOIN pizza ON pizza_samenstelling.pizzanr = Pizza.pizzanr
INNER JOIN Ingredienten ON pizza_samenstelling.ingredientnr = Ingredienten.ingredientnr;
ik denk dat dit meer in de buurt komt
Gewijzigd op 14/03/2012 15:08:07 door Maichel van Roessel
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$sql = 'SELECT Pizza.prijs, Pizza.naam, Ingredienten.ingredient, Pizza.pizzanr
FROM pizza_samenstelling
INNER JOIN pizza ON pizza_samenstelling.pizzanr = Pizza.pizzanr
INNER JOIN Ingredienten ON pizza_samenstelling.ingredientnr = Ingredienten.ingredientnr;';
$result = $db->query($sql);
$output[] = '<ul>';
while ($row = $result->fetch()) {
$output[] = '<li>"'.$row['naam'].'" met '.$row['ingredient'].': €'.$row['prijs'].'<br /><a href="cart.php?action=add&id='.$row['pizzanr'].'">Toevoegen aan winkelwagen</a></li>';
}
$output[] = '</ul>';
echo join('',$output);
?>
$sql = 'SELECT Pizza.prijs, Pizza.naam, Ingredienten.ingredient, Pizza.pizzanr
FROM pizza_samenstelling
INNER JOIN pizza ON pizza_samenstelling.pizzanr = Pizza.pizzanr
INNER JOIN Ingredienten ON pizza_samenstelling.ingredientnr = Ingredienten.ingredientnr;';
$result = $db->query($sql);
$output[] = '<ul>';
while ($row = $result->fetch()) {
$output[] = '<li>"'.$row['naam'].'" met '.$row['ingredient'].': €'.$row['prijs'].'<br /><a href="cart.php?action=add&id='.$row['pizzanr'].'">Toevoegen aan winkelwagen</a></li>';
}
$output[] = '</ul>';
echo join('',$output);
?>
En waarom werkt die niet? Wat krijg je en wat had je verwacht te krijgen? Met het SQL statement is volgens mij weinig mis, alleen denk ik dat je het te "simpel" ziet.
Ik heb echt geen idee waarom het niet werkt, wat er zou moeten komen zijn alle ingredienten op een rijtje, wat er komt is helemaal niks, hij gaat gewoon verder met de prijs. (het heeft wel gewerkt toen ik nog alle nummers in 1 kolom had, dus het zou moeten kunnen werken)
print_r($row);
Hiermee print je de hele $row in een keer zodat je kan zien welke waardes erin staan (met de keys). Plaats de output hier eens. Dan kunnen we zien wat je krijgt en wat niet.
sorry, of ik begrijp je niet goed, of er verandert helemaal niks....
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
$sql = 'SELECT Pizza.prijs, Pizza.naam, Ingredienten.ingredient, Pizza.pizzanr
FROM pizza_samenstelling
INNER JOIN pizza ON pizza_samenstelling.pizzanr = Pizza.pizzanr
INNER JOIN Ingredienten ON pizza_samenstelling.ingredientnr = Ingredienten.ingredientnr;';
$result = $db->query($sql);
while ($row = $result->fetch()) {
print_r($row)
}
?>
$sql = 'SELECT Pizza.prijs, Pizza.naam, Ingredienten.ingredient, Pizza.pizzanr
FROM pizza_samenstelling
INNER JOIN pizza ON pizza_samenstelling.pizzanr = Pizza.pizzanr
INNER JOIN Ingredienten ON pizza_samenstelling.ingredientnr = Ingredienten.ingredientnr;';
$result = $db->query($sql);
while ($row = $result->fetch()) {
print_r($row)
}
?>
Als je dit even runt kan je zien wat er uit je database wordt gehaald en dus waar het mis gaat.
Gewijzigd op 14/03/2012 16:10:36 door Erwin H
Dat kan niet kloppen, want je ziet wel de namen van de pizza's. Je doet dus iets niet goed met die print_r. Gebruik eens precies de code zoals ik die hierboven heb gepost.
Toevoeging op 14/03/2012 17:03:13:
ooh fuck, kzie nu een fout van al een tijdje, 1 moment, nieuwe results komen eraan
Toevoeging op 14/03/2012 17:06:26:
Parse error: syntax error, unexpected '}' in /home/larsvhw1/domains/pizzario.be/public_html/menu2.php on line 125
unexpected einde vd while, nu snap ik hem echt niet meer....
Dat laatste is mijn fout, moet een ; achter de print_r($row) (regel 8 in bovestaande code)
er ontbreekt een ; achter de pront_r($row)