На форуме 9558 тем, 76453 сообщений, 44667 участников
тема · 5 347 просмотров · 20 ответов

Категории и category_path или parent_id

Обо всём
читают: 0 участников и 1 гость
порядок
14 дек 2016 00:34#1
Выгружаем файл excel категории - открываем- есть столбцы, которые содержат category_id и parent_id
и у меня вопрос, допустим если есть главная категория " А " у нее category_id 1, в ней создаем подкатегорию "АВ" ставим ей parent_id 1, и у нее получается category_id 2, я правильно понимаю если мне создавать еще создавать под-под-категорию так же по этой же схеме да?
15 дек 2016 13:20#3
Chukcha написал(а): ↑c_id ; p_id
1 ; 2
2; 0
3; 2
4; 2
5; 0


какие категории главные?

Спасибо, разобрался)
15 дек 2016 13:36#4
Надеюсь топик стартер не против и во избежание создания одинаковых тем, напишу свой вопрос сюда....
Имеем id товара. С этим id обращаемся к функции getCategories, получая тем самым все категории, где отображается данный товар. И вот мне надо с этими категориями обратиться к таблице *_category_path и выбрать из них ту, которая имеет самое большое значение в строке level.
15 дек 2016 13:49#6
В том то и загвоздка, что категорий несколько и получается, что надо всё это делать в цикле, в котором мне надо обратиться к модели, чтобы получить для каждой категории значение level. И еще перед окончанием цикла нужен еще один цикл, где я буду выдавать переменной значение, опираясь на значение level.
Увесистый цикл получается.
15 дек 2016 14:19#7
Chukcha написал(а): ↑Но их может быть несколько какую выберете?

Или Вы имеет ввиду что может быть несколько категорий с одинаковым уровнем вложенности? У меня такого не случится, т.к. иерархия выгружается из 1с и каждая категория отображается исключительно в одном месте.
15 дек 2016 15:23#9
Запрос на отбор категорий делается на странице продукта. Ну например в категории Нектар есть товары Нектар 1 и Нектар 2. Я запрашиваю все категории где есть этот товар. А есть он в Продукты, Напитки и Нектары. Из этого списка мне нужно добыть id категории, которая имеет максимально глубокую вложенность, то бишь Нектары.
15 дек 2016 15:42#10
code
SELECT MAX(cp.level), c.category_id
FROM oc_category c
JOIN oc_category_path cp ON (cp.category_id = c.category_id)
JOIN oc_product_to_category p2c ON (p2c.category_id = c.category_id AND p2c.product_id = ID_PRODUCT)
GROUP BY c.category_id LIMIT 1

Попробуйте
15 дек 2016 15:55#11
То бишь это можно решить на уровне запроса к БД?
Но какими данными этот запрос оперирует? Вся таблица?
В sql я слабоват.
15 дек 2016 16:47#13
Запрос выдает не то что нужно. В итоге получаю id самой верхней категории.
15 дек 2016 16:55#14
Делал так....
php
$product_to_category_id = $this->model_catalog_product->getCategoryId($this->request->get['product_id']);


Функция модели выглядит так...
code
public function getCategoryId($product_id) {
  $query = $this->db->query("SELECT MAX(cp.level), c.category_id FROM " . DB_PREFIX . "category c JOIN " . DB_PREFIX . "category_path cp ON (cp.category_id = c.category_id) JOIN " . DB_PREFIX . "product_to_category p2c ON (p2c.category_id = c.category_id AND p2c.product_id = '" . (int)$product_id . "') GROUP BY c.category_id LIMIT 1");

  return $query->rows;
}
15 дек 2016 17:04#15
Ну да.. не сортировки по , даже MAX не нужен, что скажется на скорости
code
SELECT cp.level max_level, c.category_id
FROM oc_category c
JOIN oc_category_path cp ON (cp.category_id = c.category_id)
JOIN oc_product_to_category p2c ON (p2c.category_id = c.category_id AND p2c.product_id = 42)
ORDER BY max_level DESC
LIMIT 1
15 дек 2016 17:12#16
Так это все писалось с листа

code
SELECT *
FROM oc_category_path cp
JOIN oc_product_to_category p2c ON ( p2c.category_id = cp.category_id
AND p2c.product_id =42 )
ORDER BY level DESC
LIMIT 1

Нужно проверить на корерктность данных
15 дек 2016 17:29#17
Не помогает.... Все же спасибо за наводку! Попробую сварганить запрос как мне надо.
15 дек 2016 18:58#18
На самом деле все ок. Я просто тупил и забыл, что из полученных данных надо бы ещё извлечь то, что нужно!
Премного благодарен за помощь!
16 дек 2016 15:31#20
А у меня вопрос, категории созданы, некоторые подкатегории повторяются-это так нужно. Т.е. теперь у меня есть подкатегория с разными ID и нужно, чтобы товар появлялся в одной в одной и той же под категории, как это сделать если при редактирования товара в столбце категория id можно написать только один id? или можно через запятую прописать категория id?
сообщения 1–20 из 21
Чтобы ответить, войдите или зарегистрируйтесь.

Похожие темы