SELECT * FROM tbl WHERE...

NiGhT_GhOsT

Новичок
SELECT * FROM tbl WHERE...

У меня есть таблицы
категории: cats(id, title)
подкатегории: sub_cats(id,title, parent) в parent само собой пишется id какой либо категории
и есть: elements(id, title, body, parent) где parent это id какой либо подкатегории

Как выбрать все из elements которые относятся к определенной подкатегории понятно и дураку, а как выбрать более глобально, т.е. те, чей родитель (sub_cats) имеет родителем определенную категорию из cats???

Можно изобрести квадратное колесо и динамически создавать условие WHERE parent=1 AND..., т.е. сначала выбрать id всех sub_cats у которых родитель это нужная нам категория потом создать условие с кучей AND.
Но ведь аверняка можно сделать какой-то сложный запрос? Поможите плиз.
 

Romantik

TeaM PHPClub
А может получится без квадратного колесаесли применить nested sets
в твоем случае будет лишнее поле только у категории и подкатегории (body) зато проще работать будет
подумай.
 

BRat

o_0
а можешь ввести доп. поле parent_line, в которое будет записываться вся цепочка предков и производить поиск уже по нему
cat_1.cat_2.cat_3
 

NiGhT_GhOsT

Новичок
нет, не появится в том то и дело, что Категории, Подкатегории и Элементы. Все.
 

vovik

Новичок
SELECT *
FROM elements
WHERE parent IN (SELECT id FROM sub_cats WHERE parent = 123)

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

NiGhT_GhOsT

Новичок
не хочет =((
mysql: 3.23.38 - может не поддерживает? даже в коммандной строке не работает такой запрос...
 

vovik

Новичок
Ага, версия старовата.

SELECT e.*
FROM elements AS e
INNER JOIN sub_cats AS s ON (s.id = e.parent)
WHERE s.parent = 123

Так будет работать.
 

NiGhT_GhOsT

Новичок
СПАСИБО ОГРОМНОЕ!!! И еще, не посоветуешь от себя какую нибудь хорошую книгу по MySQL? в топик про книги плиз не отправлять.
 
Сверху