| imho.ws |
![]() |
|
|
|
# 1 |
|
::VIP::
IMHO Молодожен-2006 Регистрация: 14.06.2002
Адрес: Moscow
Сообщения: 2 921
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Выборка из двух таблиц
мне хотелось бы знать, как сделать листинг категорий и подкатегорий, а возможно и подкатегорий 2 уровня. В точности тоже самое, что и на нашем форуме "Быстрый переход" по форумам, внизу слева в каждом форуме.
я понимаю, что надо объеденить две таблицы, но что потом.... мучался, мучался, но так и не въехал, как скрипту дать понять, что это подкатегорий относиться к этой категории, а эта подкатегория 2 уровня к этой подкатегории. 2 или 3 простейшие таблицы * cat id name 1 first 2 second * subcat id cat_id name 1 1 first subcat 2 1 second subcat Спасибо! |
|
|
|
|
# 2 |
|
Full Member
Регистрация: 29.05.2002
Сообщения: 544
![]() ![]() ![]() ![]() ![]() |
Зачем хранить категории в разных таблицах? Это у тебя специальный алгоритм такой?
Простой алгоритм дерева категорий. таблица: id parentid level level - будет уровень категорий. чтобы выбрать все подкатегории n-ого уровня, ограничиваешь рекурсию определенным уровнем. базовый запрос: select & from table where parentid = id пускаешь этот запрос рекурсивно. у корня level = 0. подойдет только для небольшого кол-ва вложенных категорий. если нужно неограниченное кол-во вложенных категорий, то можно глянуть, например nested sets(смотри мою тему: «проблемы с деревом»).
__________________
убрано по просьбе администратора
|
|
|
|
|
# 4 |
|
Full Member
Регистрация: 29.05.2002
Сообщения: 544
![]() ![]() ![]() ![]() ![]() |
а тогда так:
select c.*,sc.* from cat as c inner join subcat as sc on c.id = sc.cat_id order by fileds Ну а дальше как тебе удобно. Можно, например, при парсинге сразу сформировать карты(хеши), типа: categories = array("catid"=>id,...,"subcats"=>array(...)); subcats = ("id"=>id,...); Можно это сделать потом, опять же рекурсией. Как? Решение я приводил в теме про деревья. Но там задача даже немного сложнее была, там нужно было сначала проставить связи id->parentid, а у тебя они уже есть из запроса(можно ведь сделать и так: select c.cat_id as catid, cs.subcat_id as subcat_id). Вобщем вариантов море. На худой конец, уж совсем тривиальное решение. select * from cats foreach(...) // для каждой найденой категории в цикле select * from subcats where subcats.cat_id=catid Но тогда это будет: (n-найденных категорий+1) запросов, а это гарантированно дольше, чем сделать один запрос и парсить данные.
__________________
убрано по просьбе администратора
|
|
|
|
|
# 5 |
|
::VIP::
IMHO Молодожен-2006 Регистрация: 14.06.2002
Адрес: Moscow
Сообщения: 2 921
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Sheryld
спасиб. но у меня не получается. PHP код:
категория1 -- подкатегория 1 -- подкатегория 2 ---- подподкатегория ![]() категори2 вот такую конструкцию как осуществить? |
|
|
|
|
# 6 | |
|
::VIP::
IMHO Молодожен-2006 Регистрация: 14.06.2002
Адрес: Moscow
Сообщения: 2 921
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Merlin Cori подкинул мысь - проверить в phpmyadmin запрос - нашел ошибку, спасибо ему
. Запрос выполняется, теперь пытаюсь вывести Цитата:
|
|
|
|