ОК, поэтому у меня есть это страница, и, как вы можете видеть, я регистрирую массив из 12 продуктов. Если вы прокрутите вниз, вы увидите, что мне нужно сгруппировать их по названию категории, но я не уверен, что лучший способ структурировать циклы.
my query
$query = "SELECT p.name, p.price, pc.quantity, p.image, p.descr, t.name as Category_name
FROM products as p
join categorizations as pc on p.id = pc.product_id
join categories as c on c.id = pc.category_id
JOIN types AS t on t.id = p.type_id
WHERE c.code = '{$type}_{$count}'
order by p.order desc";
$allproducts = array();
while($row_r = mysql_fetch_assoc($result)){
$allproducts[] = $row_r;
}
Возможно, мне нужно изменить свой запрос или что-то в группе по названию категории, но это может привести к потере некоторых продуктов. возможно, я могу создать многомерный массив и закодировать имя каждой категории
любые предложения
Если вы измените строку массива,
while($row_r = mysql_fetch_assoc($result)){
$allproducts[] = $row_r;
}
к
while($row_r = mysql_fetch_assoc($result)){
$allproducts[$row_r['Category_name']][$row_r['name']] = $row_r;
}
Вы будете группировать элементы по категориям автоматически, это зависит от того, как вы используете информацию впоследствии.
Если вы хотите убрать свой массив, чтобы уменьшить объем памяти массива, вы можете добавить эти строки в цикл:
unset($allproducts[$row_r['Category_name']][$row_r['name']]['Category_name']);
unset($allproducts[$row_r['Category_name']][$row_r['name']]['name']);
Если это выглядит сложным или запутанным, я обычно использую OBJECT.
while($row_r = mysql_fetch_object($result)){
$allproducts[$row_r->Category_name][$row_r->name] = $row_r;
unset($allproducts[$row_r->Category_name][$row_r->name]['Category_name']);
unset($allproducts[$row_r->Category_name][$row_r->name]['name']);
}
Есть ли уникальный столбец среди тех, кого вы тянете? Если это так, вы можете использовать GROUP BY как Category_name, так и группу, которая будет группировать категории вместе, но не удалять любые строки. Затем вы должны были бы упорядочить ваши данные по категориям, что было бы проще перебрать, база данных выполнила большую часть организационной работы для вас.
Если у вас нет уникального столбца, который вы уже вытаскиваете, это не может сильно повредить, чтобы добавить столбец первичного ключа. В этом случае ваша GROUP BY, вероятно, будет выглядеть следующим образом:
GROUP BY Category_name, p.id
mysql_fetch_object
, у меня были проблемы с использованием памяти, с которыми я не сталкивался при работе с массивами. Это имеет значение только тогда, когда вы выбираете довольно много данных - я не знаю, насколько большие наборы данных здесь. Мне нравится это решение - массивы PHP отлично подходят для организации данных.