I think Tek bir ürün listesini ve tüm o en varyasyonları yapmak için bir yol arıyoruz. Ya da tüm ürünlerin bir listesini yapmak, ve sonra her ürün için, o ürünün her varyasyonu göstermek için.
Ben senin tablolar biraz böyle bakmak farz ediyorum:
product
productId
description
variation
variationId
description
productVariation
productVariationId
productId
variationId
Tek bir ürün ve her şeyi en değişimler için iki iç birleşimler yapar aşağıdaki sorgu kullanabilirsiniz.
SELECT
P.description as product,
V.description as variation
FROM
product as P,
INNER JOIN
productVariation AS PV
ON PV.productId = P.productId
INNER JOIN
variation as V
ON V.variationId = PV.variationId
WHERE
P.productId = 1
For the whole list of products, just omit the WHERE clause.
If a product has no variations, it won't be included in the list. If you want that, use LEFT JOINs instead.
Sorgu aşağıdaki dönecektir
product variation
shoe blue
shoe green
shoe red
hat green
hat purple
hat yellow
sock white
Update:
Ben aşağıdaki gibi görüntülenen verileri istediğiniz tahmin ediyorum:
shoe
blue
green
red
hat
green
purple
yellow
sock
white
Yani şu PHP kodu ile yapılabilir.
$sql = "
SELECT
P.productId,
P.description as product,
V.description as variation
FROM
product as P,
INNER JOIN
productVariation AS PV
ON PV.productId = P.productId
INNER JOIN
variation as V
ON V.variationId = PV.variationId
";
$result = mysql_query($sql);
//first put all the results into an array so we can look backward and
//see previous items
$resultSet = array();
while($record = mysql_fetch_array($result)) {
$resultSet[] = $record;
}
for ( $i = 0 ; $i < count($resultSet) ; $i++ ) {
if ( $i == 0 ) {
//for the first item, show the product name
echo $resultSet[$i]['product'].'<br/>';
} else if ($resultSet[$i]['productId'] != $resultSet[$i-1]['productId']) {
//every time we encounter a new product
//display a new line and show the product name
echo '<br/>'.$resultSet[$i]['product'].'<br/>';
}
echo $resultSet[$i]['variation'].'<br/>';
}