![]() |
Выборка из двух таблиц
мне хотелось бы знать, как сделать листинг категорий и подкатегорий, а возможно и подкатегорий 2 уровня. В точности тоже самое, что и на нашем форуме "Быстрый переход" по форумам, внизу слева в каждом форуме.
я понимаю, что надо объеденить две таблицы, но что потом.... :( мучался, мучался, но так и не въехал, как скрипту дать понять, что это подкатегорий относиться к этой категории, а эта подкатегория 2 уровня к этой подкатегории. 2 или 3 простейшие таблицы * cat id name 1 first 2 second * subcat id cat_id name 1 1 first subcat 2 1 second subcat Спасибо! |
Зачем хранить категории в разных таблицах? Это у тебя специальный алгоритм такой?
Простой алгоритм дерева категорий. таблица: id parentid level level - будет уровень категорий. чтобы выбрать все подкатегории n-ого уровня, ограничиваешь рекурсию определенным уровнем. базовый запрос: select & from table where parentid = id пускаешь этот запрос рекурсивно. у корня level = 0. подойдет только для небольшого кол-ва вложенных категорий. если нужно неограниченное кол-во вложенных категорий, то можно глянуть, например nested sets(смотри мою тему: «проблемы с деревом»). |
Цитата:
|
а тогда так:
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) запросов, а это гарантированно дольше, чем сделать один запрос и парсить данные. |
Sheryld
спасиб. но у меня не получается. PHP код:
категория1 -- подкатегория 1 -- подкатегория 2 ---- подподкатегория :) категори2 вот такую конструкцию как осуществить? |
Merlin Cori подкинул мысь - проверить в phpmyadmin запрос - нашел ошибку, спасибо ему :) . Запрос выполняется, теперь пытаюсь вывести
Цитата:
|
| Часовой пояс GMT +4, время: 23:39. |
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.