Javascript-форум (https://javascript.ru/forum/)
-   Серверные языки и технологии (https://javascript.ru/forum/server/)
-   -   SQL подскажите пожалуйста с запросом (https://javascript.ru/forum/server/50041-sql-podskazhite-pozhalujjsta-s-zaprosom.html)

Duda.Ml1986@gmail.com 09.09.2014 11:40

SQL подскажите пожалуйста с запросом
 
Всем привет.

Есть таблица отношений пунктов меню.

Первый пункт имеет параметр
Родительский элемент
id = 1, pos = 'dep', par=0

Дочерний элемент №1
id = 365, pos = 'тут что угодно', par=1

Дочерний элемент №2
id = 5987, pos = 'тут что угодно', par=365


Нижеприведенный запрос приводит только элементы РОДИТЕЛЬСКИЕ И ДОЧЕРНИЕ №1 но как добавить еще №2
SELECT * 
FROM `jblog_menupoint` as F
JOIN `jblog_menupoint` as S
ON  S.`par` = F.`id_menupoint` 
WHERE F.`pos` = 'dep'



Так работает некорректно
SELECT * 
FROM `jblog_menupoint` as F
JOIN `jblog_menupoint` as S
ON  S.`par` = F.`id_menupoint`
JOIN `jblog_menupoint` as T
ON T.`par`=  S.`id_menupoint` 
WHERE F.`pos` = 'dep'


Благодарен за пинок в нужном направлении.

Vlasenko Fedor 09.09.2014 12:18

Nested Set

ksa 09.09.2014 13:24

Duda.Ml1986@gmail.com, я х/з, что тебе нужно в итоге... Но в книжке пример соединения нескольких таблиц выглядит так

Select
   *
From 
   aaa As a Join bbb As b
      On a.fld=b.fld,
   bbb as b Join ccc A c
      On b.prm=c.prm

Т.е. синтаксис немного не такой как у тебя...

Цитата:

Сообщение от Duda.Ml1986@gmail.com
Благодарен за пинок в нужном направлении.

Ну и декартов куб так же никто не отменял... ;)

SELECT 
   * 
FROM 
   `jblog_menupoint` as F, 
   `jblog_menupoint` as S, 
   `jblog_menupoint` as T
WHERE 
   S.`par` = F.`id_menupoint`
   And
   T.`par`=  S.`id_menupoint`
   And
   F.`pos` = 'dep'

Duda.Ml1986@gmail.com 23.09.2014 18:27

Цитата:

Сообщение от ksa (Сообщение 329685)
Duda.Ml1986@gmail.com, я х/з, что тебе нужно в итоге... Но в книжке пример соединения нескольких таблиц выглядит так

Select
   *
From 
   aaa As a Join bbb As b
      On a.fld=b.fld,
   bbb as b Join ccc A c
      On b.prm=c.prm

Т.е. синтаксис немного не такой как у тебя...


Ну и декартов куб так же никто не отменял... ;)

SELECT 
   * 
FROM 
   `jblog_menupoint` as F, 
   `jblog_menupoint` as S, 
   `jblog_menupoint` as T
WHERE 
   S.`par` = F.`id_menupoint`
   And
   T.`par`=  S.`id_menupoint`
   And
   F.`pos` = 'dep'

Все конечно классно. Но вот эта беда возвращает не совсем так как надо, а именно:

id title url id title url

и переименовывать не вариант(точнее менее желательный.)

ksa 23.09.2014 20:57

Цитата:

Сообщение от Duda.Ml1986@gmail.com
Но вот эта беда возвращает не совсем так как надо

Тогда проще тебе привести пример таблиц с данными и показать, что нужно получить в итоге...
А тот так просто пальцем в небо.

Duda.Ml1986@gmail.com 02.10.2014 18:52

Таблица

id title par
1 ttt 0
2 ppp 1
3 xxx 2

Нужно выбрать всех потомков ttt
Так что бы результат был как сама таблица, то есть идентичные имена столбов.


Select id,title,par
From table
where par = 0

union

Select t2.id,t2.title,t2.par
From
table as t,
table as t2,
where t.par = 0
and t2.par = t.id



и так далее до нужной глубины вложенности, но вот как если глубина неизвеста?

Как то через ДО и лял ля ля.

ksa 02.10.2014 21:06

Цитата:

Сообщение от Duda.Ml1986@gmail.com
так далее до нужной глубины вложенности, но вот как если глубина неизвеста?

Я не знаю рекурсивной выборки по средству SQL-запроса...

Duda.Ml1986@gmail.com 03.10.2014 11:03

Один умный человек подсказал куда рыть

Comman teble extension

Так что если кому понадобится, копайте туда)

Ksa, спасибо за участие.

bes 03.10.2014 22:17

Цитата:

Сообщение от Duda.Ml1986@gmail.com
Comman teble extension

это на каком языке?

Duda.Ml1986@gmail.com 09.10.2014 12:12

:victory:
Цитата:

Сообщение от bes (Сообщение 333351)
это на каком языке?

Common Table Expressions(CTE) in SQL SERVER 2008


Часовой пояс GMT +3, время: 17:55.