Точный вывод, который вы запрашиваете, не так легко получить, кроме как с помощью GROUP_CONCAT()
для перечисления элементов в виде списка через запятую, а не отдельных столбцов.
Поскольку не существует фиксированного набора возможных функцийобщий для всех ваших продуктов, вы не сможете использовать сводный запрос.
Я бы порекомендовал использовать GROUP_CONCAT()
, чтобы получить функции в виде списка через запятую, а затем разделить их на части PHP с помощью PHP.прикладной уровень.
SELECT
beds.id,
beds.name,
beds.brand,
beds.price,
beds.disprice,
GROUP_CONCAT(feature) AS features
FROM
beds
JOIN bedFeatures ON beds.id = bedFeatures.bedID
JOIN features ON features.id = bedFeatures.featureID
GROUP BY beds.id, beds.name, beds.brand, beds.price, disprice
Вывод этого будет выглядеть следующим образом:
d name brand price disprice features
10 Big Sleeper zzzz 1000 1 Oak,Ash,White
В вашем PHP при извлечении результатов explode()
объекты в массив:
$resultset = array();
while ($row = mysql_fetch_assoc($result)) {
// First append the whole row onto the result set as it is...
$resultset[$row['id']] = $row;
// Overwrite the `features` string with an array instead...
$resultset[$row['id']]['features'] = explode(",", $row['features']);
}
Наконец, доступ к функциям в вашем приложении:
foreach ($resultset as $r) {
echo $r['features'][0];
echo $r['features'][1];
echo $r['features'][2];
echo $r['features'][3];
}