динамически создавать строку MySQL

#mysql #sql #left-join #dynamic

#mysql #sql #соединение слева #динамический

Вопрос:

Я работал с joomla 1.6, и мне нужно использовать один и тот же столбец таблицы дважды:

существуют категории, и у каждой категории могут быть подкатегории.

в другой таблице у меня есть идентификатор, указывающий на категорию, поэтому затем я создаю объединение, чтобы заменить идентификатор на ‘title’ (описание категории)

допустим, у меня есть эти категории:

 - PARENT1
    * SUB1
    * SUB2

- PARENT2
    * SUB1
    * SUB2

TABLE CATEGORIES:
    id     |     title     |     parent_id    
--------------------------------------------
    0      |      ROOT     |        NULL
    1      |     PARENT1   |         0
    2      |      SUB1     |         1
    3      |      SUB2     |         1
    4      |     PARENT2   |         0
    5      |      SUB1     |         4
    6      |      SUB2     |         4
--------------------------------------------

TABLE DATA:
    id     |      name     |     cat_id
--------------------------------------------
    0      |    p1_sub1    |         2
    1      |    p1_sub1    |         2
    2      |    p1_sub2    |         3
    3      |    p2_sub1    |         5
    4      |    p2_sub2    |         6
    5      |    p1_sub2    |         3
    6      |    p2_sub2    |         6
--------------------------------------------
  

итак, я использую этот запрос, чтобы получить соответствующий заголовок для cat_id:

 SELECT data.name, cat.title FROM table_data AS data
LEFT JOIN table_categories AS cat ON data.cat_id = cat.id
  

это работает нормально, но теперь я также хочу получить title из parent category :

 TABLE RESULT:
   name    |     title     |     parent_title    
--------------------------------------------
  p1_sub1  |      SUB1     |        :S
--------------------------------------------
  

я имею в виду, что для этого я должен выполнить другое объединение cat.parent_id = cat.id , но мне нужно добавить еще один title столбец в запрос, чтобы…

есть идеи????

СПАСИБО!!!

Ответ №1:

Это должно сработать:

 SELECT data.name AS name, cat.title AS title, cat2.title AS parent_title
FROM   table_data AS data
       LEFT JOIN table_categories AS cat ON data.cat_id = cat.id
       LEFT JOIN table_categories AS cat2 ON cat.parent_id = cat2.id