2013-10-13 8 views
0

У меня есть две таблицы, и, как говорится в названии, мне нужно что-то вроде двойного внутреннего соединения no. Я понятия не имею, работает ли это, но я считаю, что должен быть простой способ.Внутреннее соединение MySQL, где table2 child_id похож на table2 id

То, что я получил это заявление, которое работает отлично:

SELECT 
    t1.id img_id, t1.nav_id img_nav_id, t1.name img_name, t1.img_title img_title, t1.img_text img_text, 
    t2.id nav_id,t2.parent_id nav_parent_id, t2.name nav_name, t2.directlink nav_directlink 
FROM images t1 
INNER JOIN navigation t2 
ON t2.id=t1.nav_id 
ORDER BY RAND() LIMIT 0,101 

Теперь t2 (навигационная таблица) выглядит следующим образом (таблица изображений)

+----+-----------+------------------+------------------+------+ 
| id | parent_id | name    | directlink  | rang | 
+----+-----------+------------------+------------------+------+ 
| 1 |   0 | Home    | home    | 0 | 
| 3 |   0 | Architektur  | architektur  | 1 | 
| 7 |   0 | Design   | design   | 2 | 
| 8 |   0 | Contact   | contact   | 3 | 
| 11 |   3 | Surfabricaziun 5 | surfabricaziun_5 | 0 | 
| 12 |   7 | Fluor   | fluor   | 1 | 
| 13 |   7 | Maisa   | maisa   | 2 | 
| 14 |   3 | Fuldera   | fuldera   | 3 | 

и t1 выглядит следующим образом

+-----+--------+------+----------------------+-----------+----------+ 
| id | nav_id | rang | name     | img_title | img_text | 
+-----+--------+------+----------------------+-----------+----------+ 
| 700 |  11 | 80 | Siedlg_aussen_26.jpg |   |   | 

вывод, который я получаю из инструкции sql:

+--------+------------+-------------+-----------+----------+--------+---------------+----------+------------------+ 
| img_id | img_nav_id | img_name | img_title | img_text | nav_id | nav_parent_id | nav_name | nav_directlink | 
+--------+------------+-------------+-----------+----------+--------+---------------+----------+------------------+ 
| 625 |   11 | 07.jpg  | 11  |   |  11 |    3 | Surfabri | surfabricaziun_5 | 
| 744 |   20 | 85.jpg  |   |   |  20 |    7 | Test  | test    | 

сейчас Что мне нужно или нужно: мне нужно получить родительское навигационное имя. Поэтому я хотел бы еще одно поле, называемое nav_parent_name where t2.parent_id = t2.id и для этого я попытался

SELECT 
    t1.id img_id, t1.nav_id img_nav_id, t1.name img_name, t1.img_title img_title, t1.img_text img_text, 
    t2.id nav_id,t2.parent_id nav_parent_id, t2.name nav_name, t2.directlink nav_directlink, 
    t2.name nav_parent_name 
FROM images t1 
INNER JOIN navigation t2 
INNER JOIN navigation t2 
    ON t2.parent_id = t2.id AS nav_parent_name 
ON t2.id=t1.nav_id 
ORDER BY RAND() LIMIT 0,101 

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

Заранее благодарим всех за любые предложения и советы.

+0

вы можете прочитать о замыканиях таблиц для обработки иерархических данных .. –

ответ

1

у вас есть какие-то проблемы сглаживания и нужно сохранить существующий присоединиться при добавлении нового на

SELECT 
    t1.id img_id, t1.nav_id img_nav_id, t1.name img_name, t1.img_title img_title, t1.img_text img_text, 
    t2.id nav_id,t2.parent_id nav_parent_id, t2.name nav_name, t2.directlink nav_directlink, 
    t3.name nav_parent_name 
FROM images t1 
INNER JOIN navigation t2 
    ON t2.id=t1.nav_id 
INNER JOIN navigation t3 
    ON t2.parent_id = t3.id 
ORDER BY RAND() LIMIT 0,101 
Смежные вопросы