Выберите элемент и выберите имя родителя - PullRequest
1 голос
/ 21 февраля 2009

Недоброкачественная:

Структура таблицы:

id | name | parent_id

Я хочу выполнить запрос идентификаторов, но также вернуть parent_id этого элемента и имя этого идентификатора.

Чтобы лучше объяснить

SELECT id, name FROM sections

... затем для каждого идентификатора вернуть идентификатор и имя его родителя, используя столбец "parent_id".

Я пытаюсь получить это в массив:

[0]
    [id]
    [name]
    [parent_id]
    [parent_name]

Ответы [ 5 ]

5 голосов
/ 21 февраля 2009

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

SELECT s.id, s.name, s.parent_id, p.name as parent_name
FROM sections s LEFT JOIN sections p ON s.parent_id = p.id

По сути, вы просто хотите объединить таблицу против себя и ввести поле имени в качестве родительского имени.

1 голос
/ 21 февраля 2009

делает объединение более эффективным, чем просто выполнение подвыборов?

select id as childID , name as childName, parent_id as pid, (select id from sections where id = pid) as parentID, (select name from sections where id = pid) as parentName from sections;

большая проблема в том, что это не рекурсивно ... Мне любопытно, как можно было бы добиться того, чтобы это росло до бесконечности для отношений, связанных с несколькими поколениями.

1 голос
/ 21 февраля 2009

просто присоедините таблицу к себе

что-то вроде:

SELECT child.id, child.name, child.parent_id, parent.name AS родительское имя FROM tablename child LEFT JOIN имя таблицы parent ON ON child.parent_id = parent.id

1 голос
/ 21 февраля 2009
SELECT a.id, a.name, b.id as parent_id, b.name as parent_name
FROM sections a
INNER JOIN sections b on a.parent_id = b.id

(может также выполнить внешнее соединение, если есть узлы без родителей)

0 голосов
/ 05 октября 2011

У вас может быть много решений, таких как: *

1>

Select id as id, name as id_name, (Select id from sections where id=parent_id) as parent_id, (Select name from sections where id=parent_id) as parent_name 
from sections where .....

2>

Select child.id, child.name, parent.id, parent.name 
 from sections child
 inner join sections parent on (parent.id=child.parent_id)
 where .....

Вы можете реализовать любой, но я предпочитаю 2-й ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...