imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Веб-мастеру > Веб-программирование
Опции темы
Старый 08.05.2005, 03:29     # 1
hempsmoke
::VIP::
IMHO Молодожен-2006
 
Аватар для hempsmoke
 
Регистрация: 14.06.2002
Адрес: Moscow
Сообщения: 2 921

hempsmoke Отец (мать) всех Гуруhempsmoke Отец (мать) всех Гуруhempsmoke Отец (мать) всех Гуруhempsmoke Отец (мать) всех Гуруhempsmoke Отец (мать) всех Гуруhempsmoke Отец (мать) всех Гуруhempsmoke Отец (мать) всех Гуруhempsmoke Отец (мать) всех Гуруhempsmoke Отец (мать) всех Гуруhempsmoke Отец (мать) всех Гуруhempsmoke Отец (мать) всех Гуруhempsmoke Отец (мать) всех Гуруhempsmoke Отец (мать) всех Гуруhempsmoke Отец (мать) всех Гуруhempsmoke Отец (мать) всех Гуруhempsmoke Отец (мать) всех Гуруhempsmoke Отец (мать) всех Гуруhempsmoke Отец (мать) всех Гуруhempsmoke Отец (мать) всех Гуру
Выборка из двух таблиц

мне хотелось бы знать, как сделать листинг категорий и подкатегорий, а возможно и подкатегорий 2 уровня. В точности тоже самое, что и на нашем форуме "Быстрый переход" по форумам, внизу слева в каждом форуме.

я понимаю, что надо объеденить две таблицы, но что потом....
мучался, мучался, но так и не въехал, как скрипту дать понять, что это подкатегорий относиться к этой категории, а эта подкатегория 2 уровня к этой подкатегории.

2 или 3 простейшие таблицы

* cat
id name
1 first
2 second

* subcat
id cat_id name
1 1 first subcat
2 1 second subcat

Спасибо!
hempsmoke вне форума  
Старый 08.05.2005, 06:40     # 2
Sheryld
Full Member
 
Регистрация: 29.05.2002
Сообщения: 544

Sheryld Луч света в тёмном царствеSheryld Луч света в тёмном царствеSheryld Луч света в тёмном царствеSheryld Луч света в тёмном царствеSheryld Луч света в тёмном царстве
Зачем хранить категории в разных таблицах? Это у тебя специальный алгоритм такой?

Простой алгоритм дерева категорий.

таблица:

id parentid level

level - будет уровень категорий.

чтобы выбрать все подкатегории n-ого уровня, ограничиваешь рекурсию определенным уровнем.

базовый запрос:

select & from table where parentid = id

пускаешь этот запрос рекурсивно.

у корня level = 0.

подойдет только для небольшого кол-ва вложенных категорий.

если нужно неограниченное кол-во вложенных категорий, то можно глянуть, например nested sets(смотри мою тему: «проблемы с деревом»).
__________________
убрано по просьбе администратора
Sheryld вне форума  
Старый 08.05.2005, 16:36     # 3
hempsmoke
::VIP::
IMHO Молодожен-2006
 
Аватар для hempsmoke
 
Регистрация: 14.06.2002
Адрес: Moscow
Сообщения: 2 921

hempsmoke Отец (мать) всех Гуруhempsmoke Отец (мать) всех Гуруhempsmoke Отец (мать) всех Гуруhempsmoke Отец (мать) всех Гуруhempsmoke Отец (мать) всех Гуруhempsmoke Отец (мать) всех Гуруhempsmoke Отец (мать) всех Гуруhempsmoke Отец (мать) всех Гуруhempsmoke Отец (мать) всех Гуруhempsmoke Отец (мать) всех Гуруhempsmoke Отец (мать) всех Гуруhempsmoke Отец (мать) всех Гуруhempsmoke Отец (мать) всех Гуруhempsmoke Отец (мать) всех Гуруhempsmoke Отец (мать) всех Гуруhempsmoke Отец (мать) всех Гуруhempsmoke Отец (мать) всех Гуруhempsmoke Отец (мать) всех Гуруhempsmoke Отец (мать) всех Гуру
Цитата:
Sheryld:
Зачем хранить категории в разных таблицах? Это у тебя специальный алгоритм такой?
ага. у категорий и подкатегорий разные поля.
hempsmoke вне форума  
Старый 08.05.2005, 20:08     # 4
Sheryld
Full Member
 
Регистрация: 29.05.2002
Сообщения: 544

Sheryld Луч света в тёмном царствеSheryld Луч света в тёмном царствеSheryld Луч света в тёмном царствеSheryld Луч света в тёмном царствеSheryld Луч света в тёмном царстве
а тогда так:

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 вне форума  
Старый 13.05.2005, 20:42     # 5
hempsmoke
::VIP::
IMHO Молодожен-2006
 
Аватар для hempsmoke
 
Регистрация: 14.06.2002
Адрес: Moscow
Сообщения: 2 921

hempsmoke Отец (мать) всех Гуруhempsmoke Отец (мать) всех Гуруhempsmoke Отец (мать) всех Гуруhempsmoke Отец (мать) всех Гуруhempsmoke Отец (мать) всех Гуруhempsmoke Отец (мать) всех Гуруhempsmoke Отец (мать) всех Гуруhempsmoke Отец (мать) всех Гуруhempsmoke Отец (мать) всех Гуруhempsmoke Отец (мать) всех Гуруhempsmoke Отец (мать) всех Гуруhempsmoke Отец (мать) всех Гуруhempsmoke Отец (мать) всех Гуруhempsmoke Отец (мать) всех Гуруhempsmoke Отец (мать) всех Гуруhempsmoke Отец (мать) всех Гуруhempsmoke Отец (мать) всех Гуруhempsmoke Отец (мать) всех Гуруhempsmoke Отец (мать) всех Гуру
Sheryld
спасиб. но у меня не получается.

PHP код:
$res=mysql_query("SELECT c.*,sc.* FROM {$prfx}categories as c INNER JOIN {$prfx}subcategories as sc ON c.cid=s.cat_id");
while(
$row=mysql_fetch_array($res))  echo "{$row['s.sid']}<br>"
не выводит ничего. хотелось бы, чтобы выводилось:

категория1
-- подкатегория 1
-- подкатегория 2
---- подподкатегория
категори2

вот такую конструкцию как осуществить?
hempsmoke вне форума  
Старый 17.05.2005, 20:53     # 6
hempsmoke
::VIP::
IMHO Молодожен-2006
 
Аватар для hempsmoke
 
Регистрация: 14.06.2002
Адрес: Moscow
Сообщения: 2 921

hempsmoke Отец (мать) всех Гуруhempsmoke Отец (мать) всех Гуруhempsmoke Отец (мать) всех Гуруhempsmoke Отец (мать) всех Гуруhempsmoke Отец (мать) всех Гуруhempsmoke Отец (мать) всех Гуруhempsmoke Отец (мать) всех Гуруhempsmoke Отец (мать) всех Гуруhempsmoke Отец (мать) всех Гуруhempsmoke Отец (мать) всех Гуруhempsmoke Отец (мать) всех Гуруhempsmoke Отец (мать) всех Гуруhempsmoke Отец (мать) всех Гуруhempsmoke Отец (мать) всех Гуруhempsmoke Отец (мать) всех Гуруhempsmoke Отец (мать) всех Гуруhempsmoke Отец (мать) всех Гуруhempsmoke Отец (мать) всех Гуруhempsmoke Отец (мать) всех Гуру
Merlin Cori подкинул мысь - проверить в phpmyadmin запрос - нашел ошибку, спасибо ему . Запрос выполняется, теперь пытаюсь вывести
Цитата:
категория1
-- подкатегория 1
-- подкатегория 2
---- подподкатегория
категори2
hempsmoke вне форума  

Опции темы

Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 01:18.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.