Hallo allemaal,

Ik heb een tabel prijslijst bestaande uit product, omschrijving, verpakking en prijs. Dezelfde omschrijving kan meerdere keren voorkomen alleen dan is de verpakking en de prijs anders. Mijn vraag:
Ik wil dezelfde omschrijving maar 1 maal tonen en dmv een combobox mensen laten kiezen uit de verpakkingen zodat hieruit de juiste prijs getoond wordt. Ik weet dat je met distinct de unieke waarde uit mysql kunt ophalen, maar hoe koppel ik deze weer aan de verpakking?
Ik zal nog even wat meer uitleg geven. De input van de tabel prijslijst is een csv file. Op de csv file staan bv omschrijving verpakking prijs
andijvie kg 2 euro
andijvie doos 8 euro
Het woord andijvie wil ik maar 1 maal tonen op mijn site en dmv een combobox waarin de keuze kg en doos staat wil ik laten bepalen welke prijs erbij hoort.
Ik denk niet dat dit je gaat lukken in 1 query. Je krijgt namelijk ofwel alle combinaties te zien maar dan komt 'andijvie' dus ook meerdere malen voor of, als je DISTINCT gebruikt, krijg je maar 1 combinatie te zien van elke omschrijving.

Ik denk dat het hier het makkelijkst is om met 2 queries te werken: 1 waarin je alle unieke omschrijvingen ophaalt en een 2e waarmee de combinaties behorende bij een omschrijving ophaalt.
bedankt voor je reactie Blanche,
Maar hoe zorg ik er dan voor dat de juiste waardes bij de juiste omschrijving komen?
Ik had zelf zoiets bedacht(nog zonder combobox)
$query = "SELECT DISTINCT `omschrijving` FROM `prijslijst` WHERE product='Groenten' ORDER BY 'omschrijving'";

$result = mysql_query($query,$dbh);
while ($record = mysql_fetch_assoc($result)) {
$query1 = "SELECT `verpakking`,`prijs` FROM `prijslijst` WHERE `omschrijving`='".mysql_real_escape_string($record['omschrijving'])."'";
$resultaat = mysql_query($query1,$dbh);



echo '
<tr>
<td>'.$record['type'].'</td>
<td>'.$record['omschrijving'].'</td>
<td>'.$resultaat['verpakking'].'</td>
<td>'.$resultaat['prijs'].'</td>
</tr><br>';

}
Je zou er zoiets van kunnen maken?
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL)

$sql = "
SELECT DISTINCT omschrijving
FROM prijslijst
WHERE product = 'Groenten'
";

if(!$res = mysql_query($sql))
{
trigger_error(mysql_error());
}
else
{
echo '<form action="" method="post">';

while($row = mysql_fetch_assoc($res))
{
$sqlVerpakking = "
SELECT verpakking
FROM prijslijst
WHERE omschrijving = '".$row['omschrijving']."'
";

if(!$resVerpakking = mysql_query($sqlVerpakking))
{
trigger_error(mysql_error());
}
else
{
echo $row['omschrijving'];
echo '<select name="'.$row['omschrijving'].'">';

while($rij = mysql_fetch_assoc($resVerpakking))
{
echo '<option value="'.$rij['verpakking'].'">'.$rij['Verpakking'].'</option>';
}

echo '</select>';
}
}

echo '</form>';
}
?>

Zoals je ziet heeft het in de eerste query geen zin om verpakking en prijs te selecteren, er wordt namelijk maar 1x een omschrijving opgehaald.
Ik krijg het idee dat het datamodel niet goed is. Wanneer jij in de prijslijst namelijk meerdere keren de omschrijving hebt staan, dan is er duidelijk niet genormaliseerd. Je hebt het namelijk over 1 product, dat in verschillende verpakkingen wordt geleverd. 'producten' en 'verpakkingen' zijn dan al 2 tabellen.

Pas z.s.m. het datamodel aan, de huidige opzet gaat gegarandeerd fout. Zie de tutorials hoe je kunt normaliseren.
Bedankt Blanche,

Dit is wat ik zocht nog 1 vraagje van huishoudelijke aard: Waar plaats ik de <tr> en <td> om het op een mooie manier in tabel vorm te tonen?
Dat zou dan zo worden denk ik:
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL)

$sql = "
SELECT DISTINCT omschrijving
FROM prijslijst
WHERE product = 'Groenten'
";

if(!$res = mysql_query($sql))
{
trigger_error(mysql_error());
}
else
{
echo '<table>';
echo '<form action="" method="post">';

while($row = mysql_fetch_assoc($res))
{
$sqlVerpakking = "
SELECT verpakking
FROM prijslijst
WHERE omschrijving = '".$row['omschrijving']."'
";

if(!$resVerpakking = mysql_query($sqlVerpakking))
{
trigger_error(mysql_error());
}
else
{
echo '<tr><td>';
echo $row['omschrijving'];
echo '</td><td>';
echo '<select name="'.$row['omschrijving'].'">';

while($rij = mysql_fetch_assoc($resVerpakking))
{
echo '<option value="'.$rij['verpakking'].'">'.$rij['Verpakking'].'</option>';
}

echo '</select></td></tr>';
}
}

echo '</form>';
echo '</table>';
}
?>

Maar ik zou het liever gewoon alleen met css doen. Een tabel is niet voor de layout van je website bedoeld!

Neem daarnaast ook nog de opmerking van Frank ter harte en neem je datamodel nog eens onder de loep.

Reageren