2014-09-10 4 views
0

Я пытаюсь получить всех родителей детей. У меня есть простой запрос выбрать из разделов, где sectionID = 6 Структура базы данных является очень простымphp mysql получить все родители

sectionID parent 
1  0 
2  1 
3  1 
4  2 
5  4 
6  5 

Теперь я пытаюсь получить все родитель от sectionID 6, результат должен быть строкой 0/2/4/5/6. У детей может не быть много родителей, это может быть только одно, поэтому результат должен быть другим. i.e 5/6 .. Надеюсь, вы понимаете, что я пытаюсь сделать. Я пробовал пару рекурсивных функций, которые я нашел в Интернете, но я действительно сосать в этом, и мне было интересно, сможет ли кто-нибудь помочь мне встать на правильный путь. P.S Я использую php и mysql

ответ

-1

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

section = 6 
result = "" 
while section != "" 
    select parent where sectionID = section 
    result += parent 
    section = parent 
return result 
0

Ну, насколько я вижу, у вас есть два варианта, оба хорошо известны.

1) Вы делаете рекурсивную функцию, только те, которые вы пытались. Их много, и я не стану его здесь.

2) Безусловно, мой любимый, это образец базы данных, самый современный способ использования ORM, он называется вложенной моделью набора.

В принципе вы создать несколько столбцов на столе, он должен выглядеть как этот:

CREATE TABLE nested_category (
     category_id INT AUTO_INCREMENT PRIMARY KEY, 
     name VARCHAR(20) NOT NULL, 
     lft INT NOT NULL, 
     rgt INT NOT NULL 
); 

INSERT INTO nested_category VALUES(1,'ELECTRONICS',1,20),(2,'TELEVISIONS',2,9),(3,'TUBE',3,4), 
(4,'LCD',5,6),(5,'PLASMA',7,8),(6,'PORTABLE ELECTRONICS',10,19),(7,'MP3 PLAYERS',11,14),(8,'FLASH',12,13), 
(9,'CD PLAYERS',15,16),(10,'2 WAY RADIOS',17,18); 

SELECT * FROM nested_category ORDER BY category_id; 

+-------------+----------------------+-----+-----+ 
| category_id | name     | lft | rgt | 
+-------------+----------------------+-----+-----+ 
|   1 | ELECTRONICS   | 1 | 20 | 
|   2 | TELEVISIONS   | 2 | 9 | 
|   3 | TUBE     | 3 | 4 | 
|   4 | LCD     | 5 | 6 | 
|   5 | PLASMA    | 7 | 8 | 
|   6 | PORTABLE ELECTRONICS | 10 | 19 | 
|   7 | MP3 PLAYERS   | 11 | 14 | 
|   8 | FLASH    | 12 | 13 | 
|   9 | CD PLAYERS   | 15 | 16 | 
|   10 | 2 WAY RADIOS   | 17 | 18 | 
+-------------+----------------------+-----+-----+ 

Если вы заметили, что нет колонки parent_id. Чтобы иметь возможность искать его для детей, допустим, строка 5 будет выглядеть так:

Select * from nested_category where left > 7 and left < 8 order by left asc, что не принесет никаких результатов.

Для ряда номер 1 результат, однако, принесет все дерево.

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

Вы мои найти много информации вокруг поиска для «вложенных множеств модели», как this или theorical exaplanations модели like this one

И ЭТО ПУТЬ дублируется ВОПРОС (я не могу поставить его как дублируется)

Некоторые другие ответы:

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

Надеюсь, это поможет.

Смежные вопросы