PHP Показать товары в дочерних категориях ... заказная корзина - PullRequest
0 голосов
/ 22 июня 2011

У меня есть корзина, которую я делаю. И я ошеломлен, узнав, как я могу загружать продукты в многоуровневые категории, которые являются детьми той категории, на которую я смотрю.

Например: -Машины Subarus (Legacy, Outback) - Холден (Commodore, Кале) - Toyota (Королла, Камри)

Если я смотрю в категории автомобилей, я могу выбрать дочернюю категорию, но я не могу просмотреть реальные продукты, которые находятся в этих подкатегориях. Есть ли способ, которым я могу сделать это? даже если у вас может быть неограниченное количество категорий, таких как «ROOT> Cars> Sedan> Subaru's ...»?


Каждый продукт имеет идентификатор категории, который относится к категории. У каждой категории есть свой уникальный идентификатор и идентификатор «родителя», который имеет идентификатор категории, к которой она относится.

1 Ответ

1 голос
/ 22 июня 2011

Я думаю, что вам нужно будет создать список идентификаторов категорий, чтобы затем создать предложение IN для вашего sql.Допустим, у вас есть следующая структура категории:

  • Автомобили (id: 1)
    • Toyota (id: 2, родитель: 1)
      • Mini (id:3, родитель: 2)
      • Венчик (id: 4, родитель: 3)
    • Holden (id: 5, родитель: 1)
      • Спорт (id: 6, родитель: 5)
      • HSV (id: 7, родитель: 6)

Получить всепотомки категории, вам нужно перебрать структуру родитель / потомок примерно так:

/** 
  * I'm only writing pseudocode here btw; I haven't tested it.
  * Obviously you'll need to fire the SQL commands...
  */
function getKids ($id, $found = array()) 
{
  array_push ($found, $id);
  $nbrKids = "select count(id) from category where parent_id = $id";
  if ($nbrKids > 0) {
    $newKids = "select id from category where parent_id = $id";
    foreach ($newKids as $kid) {
      return getKids ($kid, $found);
    }
  }
  else {
    return $found;
  }
}

Затем вызовите getKids() вот так, где $id - это идентификатор вашей категории:

$ids = getKids($id);

$ids - это массив всех категорий, которые вас интересуют. Затем вы можете использовать join() для построения строки SQL:

$sql = "select * from cars where category_id in (" . join (",", $ids) . ")";

Для правильности вы должны проверитьчто $ids имеет по крайней мере 1 член первым, иначе ваш запрос SQL будет недействительным.

[edit: фактически в приведенном выше коде, $ids всегда будет иметь хотя бы одного члена: начальный идентификатор.Тем не менее, код не подтверждает, что начальный идентификатор является допустимым category_id.]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...