Есть ли правильный способ структурировать массив лучше для зацикливания

0

ОК, поэтому у меня есть это страница, и, как вы можете видеть, я регистрирую массив из 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;
}

Возможно, мне нужно изменить свой запрос или что-то в группе по названию категории, но это может привести к потере некоторых продуктов. возможно, я могу создать многомерный массив и закодировать имя каждой категории

любые предложения

Теги:

2 ответа

3
Лучший ответ

Если вы измените строку массива,

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']);
}
  • 0
    Хотя для удобства мне также нравится использовать mysql_fetch_object , у меня были проблемы с использованием памяти, с которыми я не сталкивался при работе с массивами. Это имеет значение только тогда, когда вы выбираете довольно много данных - я не знаю, насколько большие наборы данных здесь. Мне нравится это решение - массивы PHP отлично подходят для организации данных.
0

Есть ли уникальный столбец среди тех, кого вы тянете? Если это так, вы можете использовать GROUP BY как Category_name, так и группу, которая будет группировать категории вместе, но не удалять любые строки. Затем вы должны были бы упорядочить ваши данные по категориям, что было бы проще перебрать, база данных выполнила большую часть организационной работы для вас.

Если у вас нет уникального столбца, который вы уже вытаскиваете, это не может сильно повредить, чтобы добавить столбец первичного ключа. В этом случае ваша GROUP BY, вероятно, будет выглядеть следующим образом:

GROUP BY Category_name, p.id
  • 0
    в какой таблице мне нужен столбец первичного ключа .... продукты или типы
  • 0
    Предположительно продукты, потому что это те, которые гарантированно будут уникальными для каждого ряда, верно? Если вы группируете по Category_name, а затем types.id, вы получите только одну строку на каждую Category_name и комбинацию идентификаторов типов. Преимущество группировки по Category_name и затем products.id состоит в том, что вы получаете строки, сгруппированные по Category_name, но вы не потеряете ни одной строки, потому что нет повторяющихся идентификаторов продуктов.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню