Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да извлечем категории и подкатегории в една заявка в sql? (mysql)

Ако питате за "Има ли в mysql рекурсивни заявки?" отговорете "НЕ".

Но има много добър подход за справяне.

Създайте помощна таблица (като казва CatHierarchy)

CatHierarchy:
    SuperId, ChildId, Distance
------------------------------ 
     1          1         0
     1          2         1
     2          2         0

Тези излишни данни позволяват лесно в 1 заявка да се избере всяка йерархия, а в 2 вмъкване поддържа всяка йерархия (изтриването също се извършва в 1 заявка с помощта на изтриване на каскадна цялост).

И така, какво означава това. Проследявате всички пътища в йерархия. Всеки възел на Cat трябва да добави препратка към себе си (разстояние 0), след което да поддържа дублиране чрез добавяне на излишни данни за свързаните възли.

За да изберете категория с под, просто напишете:

 SELECT c.* from Category c inner join CatHierarchy ch ON ch.ChildId=c.cat_id
      WHERE ch.SuperId = :someSpecifiedRootOfCat

someSpecifiedRootOfCat - е параметър за определяне на корен на категория ТОВА ВСИЧКО!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. По-ефективно е да имате повече колони или повече редове?

  2. подзаявката връща повече от 1 ред

  3. Как да направя форматиране на "Правилен случай" на колона на mysql?

  4. проста SQL заявка, която дава невалидно използване на групова функция

  5. MySQL GUI програми