Я думаю вы ищете способ составить список одного продукта и всех его вариантов. Или составьте список всех продуктов, а затем для каждого продукта, чтобы показать все варианты этого продукта.
Я предполагаю, что ваши таблицы выглядят примерно так:
product
productId
description
variation
variationId
description
productVariation
productVariationId
productId
variationId
Для одного продукта и всех его вариантов вы можете использовать следующий запрос, который выполняет два внутренних объединения.
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
Для всего списка продуктов просто опустите предложение WHERE.
Если товар не имеет вариантов, он не будет включен в список. Если вы хотите этого, используйте вместо этого ЛЕВЫЕ СОЕДИНЕНИЯ.
Запрос вернет следующее
product variation
shoe blue
shoe green
shoe red
hat green
hat purple
hat yellow
sock white
Обновление:
Полагаю, вы хотите, чтобы данные отображались следующим образом:
shoe
blue
green
red
hat
green
purple
yellow
sock
white
Это можно сделать с помощью следующего кода PHP.
$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/>';
}