Есть вопрос один по поводу майскюельного запроса…
Короче говоря, так. Предметная область: нет-магазин.
Что надо? Как не банально - но вывести(какая бы то страница не была) в левой/правой стороны сайта список всех категорий и подкатегорий товаров
(чтото наподобе
+Аудиосистемы (Категория)
-Магнитолы (подкатегрия 1)
-Аудиоплееры (подкатегрия 2)
-Муз. центры (подкатегрия 3)
)
Ну это понятно….почти на каждом магазине так….
Шо меня интерессует: Как именно сложыть такой запрос, который будет выводить каждую категорию(и вложенную в нее подкатегорию) этих товаров?
я пробовал по-разному, но почемуто ничего толкового в голову не лезет…
Итак…структура моих таблиц…
их три: Категории, Субкатегории и естессно их же таблица связей.
Структура:
Категории(cat): cat_id(FK),cat_name
Субкатегории(subcat): subcat_id(FK),subcatcat_name
Таблица связей(relations): cat_id(PK),subcat_id(PK) …. соответственно.
Шоб выбрать все со всех таблиц я конешно же генерю одну таблицу из трех
"SELECT DISTINCT * FROM cat LEFT JOIN relations
ON relations.cat_id=cat.cat_id
LEFT JOIN subcat
ON relations.subcat_id=subcat.subcat_id
ORDER BY cat.cat_id ASC"
И конешно же запрос (mysql_assoc) возвращает соответственное количество строк…..
Array
(
[cat_id] => 1
[cat_name] => Аудиосистемы
[subcat_id] => 7
[subcat_name] => Аудиоплееры
)
Array
(
[cat_id] => 1
[cat_name] => Аудиосистемы
[subcat_id] => 5
[subcat_name] => Магнитолы
)
Array
(
[cat_id] => 2
[cat_name] => Канцелярия
[subcat_id] => 4
[subcat_name] => Карандашы
)
Array
(
[cat_id] => 2
[cat_name] => Канцелярия
[subcat_id] => 8
[subcat_name] => Шариковые ручки
)
Вообщем, из содержымым бд понятно….
Идем дальше…
Шалон.
В шаблоне я вывожу шото типа массива(который передает сюди контроллер):
(foreach)
<tr><td><a href = "?cat={$cat_id}">{$cat_name}</a></td></tr>
<tr><td><a href = "?cat={$cat_id}&subcat={$subcat_id}">{$subcat_id}</a></td></tr>
(/foreach)
Ну и как результат оно выводит совсем не так как требуеться…
+Аудиосистемы
-Аудиоплееры
+Аудиосистемы
-Магнитолы
+Канцелярия
-Карандашы
+Канцелярия
-Шариковые ручки
Вообщем, и не странно, обо в нашем случае в шалоне пара из двух строк это и есть каждая строка запроса
Итак…..теперь собсно говоря сам вопрос…
Какое можно в бд-запросе написать условие, чтобы запрос возвращал чтото наподобие
такого(в случае mysql_array ибо assoc тут я думаю не покатит изза неуникальных названий ключей массива)
Array
(
0=> [cat_id] => 1
[cat_name] => Аудиосистемы
1=>([subcat_id] => 7
[subcat_name] => Аудиоплееры)
2=([subcat_id] => 5
[subcat_name] => Магнитолы)
)
Array
(
0=>([cat_id] => 2
[cat_name] => Канцелярия)
1=>([subcat_id] => 4
[subcat_name] => Карандашы)
2=>([subcat_id] => 8
[subcat_name] => Шариковые ручки)
)
Может быть ошыбка наверное не в запросе как именно в выводе шаблона…..неправильно построил этих 2 строки…хотя и с другой стороны как по другому то вывести все в одном цыкле - тот еще вопрос.
Пока я тут писал эту тему я одновременно дальше пробовал разбираться над этой проблемой…и что мне в голову пришло: самые категории в шаблоне надо позадавать явно….тоесть из ссылкой типа "?catid=1" и название ссылки тоже явно…Вот лишь все подкатегории повыводить запросом в зависимости от номера категории…
хотя….что выходит?…..ладно я еще в этом примере вывел две категории(значит 2 запроса)….а если категорий штук 50…..тогда и 50запросов сразу?……не, это тяжко скажеться на оптимизаци…
Вообщем, господа, я здаюсь…
Чем можете, памагите, буду очень благодарен…