Таблица категорий с идентификаторами cat_ID, которые соответствуют cat_subcat и содержат нулевые значения - PullRequest
0 голосов
/ 19 февраля 2019

cat_ID |cat_Name |Cat_SubCat1 |камеры |172 |домофоны |173 |телевизоры |204 |кухонная техника | 195 |колонки | 206 |умный термостат |197 |умные магазины |188 |роботизированные газонокосилки |179 |смартфоны |2111 |умные пылесосы |1912 |умные часы |2113 |умные замки |1714 |умный дверной звонок |1715 |умные выключатели света |1817 |Безопасность / На улице |НОЛЬ18 |Лампы и Свет |НОЛЬ19 |Бытовая |НОЛЬ20 |Развлечения |НОЛЬ21 |Носки |НОЛЬИтак, у меня есть таблица под названием Category со столбцами с именем: cat_ID;cat_name;и cat_SubCat;Я попытался получить все строки категорий с нулем (заголовок) для печати других строк и связанных с ними cat_ID (подкатегории под заголовком)

desired outcome

cat_ID |cat_Name |Cat_SubCat 17 |Безопасность / На улице |Null 1 |Камеры |172 |Домофоны |179 | Роботизированные газонокосилки |1713 |Умные Замки |1714 |Умный дверной звонок |17 18 |Лампы и Свет |Ноль 7 |Smart Outlets |1815 |Умные Переключатели |18 19 |ДомХолд |Ноль 4 |Техника для кухни |196 |Умный Термостат |1911 |Умные Пылесосы |19 20 |Развлечения |Ноль 3 |Телевидение |205 |Колонки |20 21 |Носки |Ноль 10 |Смартфон |2112 |Умные часы |21

Ответы [ 4 ]

0 голосов
/ 19 февраля 2019

Simonare Спасибо +1Выбратьt2.cat_ID,t2.cat_Name,t2.Cat_SubCatиз таблицы 1 т2левое присоединение table1 t1на t2.Cat_SubCat = t1.cat_idгде t1.Cat_Subcat равен нулюзаказ по Coalesce (t2.cat_subcat, t2.cat_Id-0.01)

0 голосов
/ 19 февраля 2019

Поскольку ваша иерархия имеет только одну глубину, вы можете просто:

ORDER BY COALESCE(cat_id, cat_subcat) ASC 

на существующем SQL.

Если ваша иерархия более чем на одну глубину, вам нужно будет сделать рекурсивный CTE, чтобы установить порядок в новом столбце и отсортировать по нему.

0 голосов
/ 19 февраля 2019

Попробуйте следующим образом

SQL Fiddle

MySQL 5.6 Настройка схемы :

CREATE TABLE Table1
    (`cat_ID` int, `cat_Name` varchar(20), `Cat_SubCat` varchar(4))
;

INSERT INTO Table1
    (`cat_ID`, `cat_Name`, `Cat_SubCat`)
VALUES
    (1, 'cameras', '17'),
    (2, 'intercoms', '17'),
    (3, 'televisions', '20'),
    (4, 'kitchen appliances', '19'),
    (5, 'speakers', '20'),
    (6, 'smart thermostat', '19'),
    (7, 'smart outlets', '18'),
    (8, 'robotic lawn mowers', '17'),
    (9, 'smartphones', '21'),
    (11, 'smart vaccums', '19'),
    (12, 'smartwatches', '21'),
    (13, 'smart locks', '17'),
    (14, 'smart doorbell', '17'),
    (15, 'smart light switches', '18'),
    (17, 'Security/Outdoors', NULL),
    (18, 'Lamps & Lights', NULL),
    (19, 'Household', NULL),
    (20, 'Entertainment', NULL),
    (21, 'Wearables', NULL)
;

Запрос 1 :

select 
  t2.cat_ID,
  t2.cat_Name,
  t2.Cat_SubCat
from table1 t2
left join table1 t1
  on t2.Cat_SubCat = t1.cat_id
where t1.Cat_Subcat is null
order by Coalesce(t2.cat_subcat, t2.cat_Id-0.01)

Результаты :

| cat_ID |             cat_Name | Cat_SubCat |
|--------|----------------------|------------|
|     17 |    Security/Outdoors |     (null) |
|      1 |              cameras |         17 |
|     13 |          smart locks |         17 |
|     14 |       smart doorbell |         17 |
|      8 |  robotic lawn mowers |         17 |
|      2 |            intercoms |         17 |
|     18 |       Lamps & Lights |     (null) |
|     15 | smart light switches |         18 |
|      7 |        smart outlets |         18 |
|     19 |            Household |     (null) |
|     11 |        smart vaccums |         19 |
|      6 |     smart thermostat |         19 |
|      4 |   kitchen appliances |         19 |
|     20 |        Entertainment |     (null) |
|      5 |             speakers |         20 |
|      3 |          televisions |         20 |
|     21 |            Wearables |     (null) |
|      9 |          smartphones |         21 |
|     12 |         smartwatches |         21 |
0 голосов
/ 19 февраля 2019

Если я правильно понимаю проблему, вы хотите:

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

Использование подзапроса, это должно достичь вашей цели.Сначала мы берем все идентификаторы для вещей, которые являются нулевыми, затем проверяем, чтобы, наконец, захватить все значения, ЕСЛИ эти нулевые идентификаторы являются подкатегорией, или подкатегория вообще нулевая.

  SELECT 
    *
  FROM
    Category,
    (
      SELECT cat_ID,
      FROM Category
      WHERE Cat_SubCat is NULL
    ) tempTbl

  WHERE
    (Cat_SubCat is NULL)
    OR
    (tempTbl.cat_ID = Cat_SubCat)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...