Вложенный / Рекурсивный запрос MySQL - PullRequest
1 голос
/ 23 января 2012

У меня есть таблица БД под названием foo. Он имеет следующие поля:

  • ID
  • имя
  • ParentID

Он может опуститься на 3 уровня, например:

  • Foo 1 (parentId: 0)
    • Foo 2 (parentId: 1) (дочерний элемент foo 1)
      • Foo 3 (parentId: 2) (дочерний элемент foo1 и foo2)

Теперь проблема в том, что в моей таблице пользователей есть поле с именем fooId. Я хочу получить всех пользователей, принадлежащих к foo верхнего уровня.

Например, если fooId пользователя равен 3, и я хочу получить всех пользователей, связанных с fooId 1 (из приведенного выше примера), то этот пользователь должен учитываться в результатах.

Если бы это было всего два уровня, я мог бы сделать что-то вроде этого:

`SELECT stuff FROM users, foo WHERE foo.parentId = '1' AND user.fooId = foo.id

Но как я могу это сделать в нынешней ситуации?

Ответы [ 2 ]

1 голос
/ 23 января 2012

Может быть что-то вроде этого ...

SELECT stuff FROM users, foo WHERE foo.parentId = '1' AND user.fooId = foo.id UNION SELECT stuff FROM users WHERE fooId = '3'

РЕДАКТИРОВАТЬ: SELECT stuff FROM users, foo WHERE foo.parentId = '1' AND user.fooId = foo.id UNION ALL SELECT stuff FROM users WHERE fooId = '3'

1 голос
/ 23 января 2012

Я уверен, что моя логика в какой-то момент здесь испорчена ... но она может привести вас в правильном направлении

SELECT stuff 
FROM users, foo
WHERE (foo.parentId = '1' AND user.fooId = foo.id) 
OR user.fooId IN (
  SELECT fooid from foo where parentID IN (
    SELECT fooid from foo where parentID = '1'
  )
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...