SQL (?) Как разобрать родительскую категорию из крошки, чтобы обновить поля с parentID? - PullRequest
0 голосов
/ 04 июля 2019

У меня есть небольшая хитрая проблема в надежде, что кто-то может мне помочь.

У меня есть структура категорий, которая включает в себя:

  • id
  • путь категории
  • название категории

Пример:

1   Root/Arts   Arts
2   Root/Arts/Animation Animation
3   Root/Arts/Animation/Anime   Anime
4   Root/Arts/Animation/Anime/Characters    Characters
5   Root/Arts/Animation/Anime/Clubs_and_Organizations   Clubs_and_Organizations
6   Root/Arts/Animation/Anime/Collectibles  Collectibles
7   Root/Arts/Animation/Anime/Collectibles/Cels Cels
8   Root/Arts/Animation/Anime/Collectibles/Models_and_Figures   Models_and_Figures
9   Root/Arts/Animation/Anime/Collectibles/Models_and_Figures/Action_Figures    Action_Figures
10  Root/Arts/Animation/Anime/Collectibles/Models_and_Figures/Action_Figures/Gundam Gundam
11  Root/Arts/Animation/Anime/Collectibles/Models_and_Figures/Action_Figures/Zoids  Zoids
12  Root/Arts/Animation/Anime/Collectibles/Models_and_Figures/Models    Models
13  Root/Arts/Animation/Anime/Collectibles/Models_and_Figures/Models/Gundam Gundam
14  Root/Arts/Animation/Anime/Collectibles/Shitajiki    Shitajiki

Мне нужно определить родительскую категорию для каждой строки, чтобы таблица выглядела примерно так:

  • ID
  • имя
  • путь
  • parent_id

Данные в SQL, но у меня также есть текстовые файлы, и я могу работать с ними в командной строке. Может быть, это лучший инструмент для работы?

Вот сценарий SQL, использующий запрос, представленный ниже, и пример данных выше:

http://sqlfiddle.com/#!9/e060ec/1

Заранее спасибо за любые рекомендации.

Ответы [ 2 ]

1 голос
/ 05 июля 2019

Я исправил sql.

SELECT c.id, c.name, c.path, p.id AS parent_id
FROM cat_test p
RIGHT JOIN (
  SELECT id, name,path, LEFT(path,LENGTH(path) - LENGTH(name)-1) AS parent
  FROM cat_test) c
ON c.parent=p.path

SQL Fiddle

У меня недостаточно репутации, чтобы добавить комментарий, поэтому я выдвигаю новый ответ. Извините за это.

0 голосов
/ 04 июля 2019

Родительский идентификатор может быть нулевым. Пожалуйста, проверьте синтаксис дважды:

SELECT c.id, c.name, c.path, p.id AS parent_id
FROM category_table p
RIGHT JOIN (
  SELECT id, name,path, LEFT(path,LENGTH(path) - LENGTH(name)+1) AS parent
  FROM category_table) c
ON c.parent=p.path
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...