На форуме 9558 тем, 76452 сообщений, 44664 участников
тема · 3 437 просмотров · 5 ответов

Таблица: oc_category_path

Общие вопросы
читают: 0 участников и 1 гость
порядок
15 янв 2018 08:44#1
Здравствуйте. Подскажите, пожалуйста, следующее. В таблице oc_category_path три столбца: category_id, path_id и level. Что такое category_id мне понятно - это уникальный идентификатор категории. А вот следующие два (path_id и level) мне не понятно зачем нужны. Какой-то идентификатор пути и уровень :-) Кстати, без этой таблицы всё работает также как и с ней. Я не заметил разницы. Объясните, пожалуйста, непосвящённому :-)
15 янв 2018 13:07#3
Vlad написал(а): ↑http://forum.opencart-russia.ru/threads/kategorii-i-category_path-ili-parent_id.4344/

Спасибо за ответ, но в теме мне всё же не удалось уловить смысл столбцов path_id и level. Вот взгляните https://beta.ssm.cash/ В таблице os_category_path нет никаких данных в этом примере, я очистил таблицу. Почему тогда все переходы по категориям проходят без ошибок?
15 янв 2018 15:10#4
В основном это таблица используется только в админке
Не помню в какой версии она появилась, но ее суть - быстрое построение пути категории

Без вложенных запросов
Вот пример, этим запросом вы получите все Категории со всеми путями с именами
code
SELECT cp.category_id AS category_id, GROUP_CONCAT(cd1.name ORDER BY cp.level SEPARATOR '  >  ') AS name, c1.parent_id, c1.sort_order 
FROM " . DB_PREFIX . "category_path cp 
LEFT JOIN " . DB_PREFIX . "category c1 ON (cp.category_id = c1.category_id) 
LEFT JOIN " . DB_PREFIX . "category c2 ON (cp.path_id = c2.category_id) 
LEFT JOIN " . DB_PREFIX . "category_description cd1 ON (cp.path_id = cd1.category_id) 
LEFT JOIN " . DB_PREFIX . "category_description cd2 ON (cp.category_id = cd2.category_id) 
WHERE cd1.language_id = '" . (int)$this->config->get('config_language_id') . "' AND cd2.language_id = '" . (int)$this->config->get('config_language_id') . "'"


Или вот

code
SELECT CAST( GROUP_CONCAT( c1.category_id
ORDER BY level
SEPARATOR '_' ) AS CHAR( 100 ) ) path
FROM oc_category_path cp
LEFT JOIN oc_category c1 ON ( cp.path_id = c1.category_id )
GROUP BY cp.category_id

Одним запросом получены все PATH категорий
15 янв 2018 15:55#5
Всё верно! При отсутствии данных в этой таблице в админке нет данных о категориях тоже. Благодарю!
18 янв 2018 03:37#6
В итоге я разобрался. Предположим, что есть такая иерархия категорий (в скобках указан category_id):
* Продукты (1)
** Овощи (2)
*** Картофель (3)
*** Морковь (4)
В таком случае таблица oc_category_path будет такой:
category_id | path_id | level
1 | 1 | 0
2 | 2 | 1
2 | 1 | 0
3 | 3 | 2
3 | 2 | 1
3 | 1 | 0
4 | 4 | 2
4 | 2 | 1
4 | 1 | 0
сообщения 1–6 из 6
Чтобы ответить, войдите или зарегистрируйтесь.

Похожие темы