Вопрос № 75164: в базе 2 таблицы - в одной названия разделов
id, cod, name_razdel
во второй соответствующие подразделы
id, cod_pazdela, cod_podrazdela, name_podrazdela
надо сделать чтобы выводился список(должно получится меню) вида
Раз...Вопрос № 75289: Возник у меня ламерский вопрос по MySQL:
Листаю книжку М.Кузнецов, И.Симдянов, С.Голышев "PHP5 Практика создания Веб Сайтов" непонятно что обозначает данная структура в SQL запросе:
CREATE TABLE artpage(
id_artpage INT NOT NULL...
Вопрос № 75.164
в базе 2 таблицы - в одной названия разделов
id, cod, name_razdel
во второй соответствующие подразделы
id, cod_pazdela, cod_podrazdela, name_podrazdela
надо сделать чтобы выводился список(должно получится меню) вида
Отправлен: 11.02.2007, 06:26
Вопрос задал: Gammy (статус: Посетитель)
Всего ответов: 3 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Ерёмин Андрей
Здравствуйте, Gammy!
Вот примерный запрос к базе данных:
SELECT `table2`.`cod_razdela`,`table1`.`name_razdela`,`table2`.`name_podrazdela`
FROM `table2` INNER JOIN `table1`
ON `table1`.`cod` = `table2`.`cod_razdela`
ORDER BY `table2`.`name_podrazdela`
Он вернёт следующие поля: код раздела, название раздела, название подраздела. Дальше уже дело за PHP - вывод через цикл третьего поля - получите названия подразделов. Чтобы вывести ещё и названия разделов, в цикле следует поставить проверку: если предыдущая запись по первому полю не совпадает с текущей, значит выводим второе поле (т.е. у всех подразделов по группам первое поле будет одинаковым).
Команды подключения к БД я здесь не приводил. А вот как примерно будет выглядеть цикл:
P.S. Назовите поля таблиц нормальными именами. Транслит смотрится ужасно, да и ошибиться при написании таких полей легко.
Желаю удачи!
--------- Нет правила без исключений. Правило без исключений - исключение из правил.
Отвечает: Илья Андреевич
Здравствуйте, Gammy!
я бы сказал, что это в корне не правильно.
Надо сделать 2 таблицы:
1) имена разделов и их ID
2) структура разделов.
тоесть:
--table cat_names--
ID_CAT
NAME
--table cat_struct--
ID_CAT
ID_PARENT
---
Это будет древовидная структура.
таким образом вы можете сделать сколько угодно уровневое меню и выводиться оно будет всего одной рекурсивной фукнцией.
только вам надо сделать сначал корень в дереве.
тоесть
insert into `cat_struct` values (0,1),(0,2);
соответственно обозвать эти уровни меню в cat_names:
insert into `cat_names` values(1,'Раздел 1'),(2,'Раздел 2');
ну и теперь по аналогии.
функцию вывода смотрите в приложение.
Приложение:
Ответ отправил: Илья Андреевич (статус: 9-ый класс)
Ответ отправлен: 11.02.2007, 15:02
Отвечает: PVS
Здравствуйте, Gammy!
Если у Вас структура двоуровневая - сделайте цикл в цикле:
$outer=mysql_query("select * from razdel_tab order by cod");
while($orow=mysql_fetch_array($outer)){
echo $orow["NAME_RAZDEL"]." ";
$inner=mysql_query("select * from podrazdel_tab where cod_razdela=".$orow['COD']." order by cod_podrazdela");
while($irow=mysql_fetch_array($inner)){
echo $irow['NAME_PODRAZDELA']." ";
};
};
И еще: Вам достаточно одной таблицы (второй). Просто поле cod_razdela сделайте необязательным и для разделов оно будет NULL, а для подразделов - код раздела верхнего уровня.
Ответ отправил: PVS (статус: Специалист)
Ответ отправлен: 12.02.2007, 09:29
Вопрос № 75.289
Возник у меня ламерский вопрос по MySQL:
Листаю книжку М.Кузнецов, И.Симдянов, С.Голышев "PHP5 Практика создания Веб Сайтов" непонятно что обозначает данная структура в SQL запросе:
CREATE TABLE artpage(
id_artpage INT NOT NULL AUTO_INCREMENT,
name TEXT NOT NULL,
PRIMARY KEY (id_artpage)
)
CREATE TABLE articles(
id_article INT NOT NULL AUTO_INCREMENT,
...
другие поля
...
id_artpage INT NOT NULL,
KEY id_artpage(id_artpage) интересует именно KEY для чего это?
)
Понятно что поле id_artpage указывает принадлежность к artpage для чего указывается KEY ? и почему id_artpage(id_artpage) логично было бы если бы указывалось из какой таблицы ключь, может в книге опечатка?
С БД работал мало так что ссори за lmd question.
Отвечает: lupus campestris
Здравствуйте, Королёв Руслан!
KEY - это индекс, id_artpage перед скобочкой - имя индекса, id_artpage в скобочках - имя столбца.
Более подробно смотрите здесь - http://www.mysql.ru/docs/man/CREATE_TABLE.html (на русском языке) или здесь - http://dev.mysql.com/doc/refman/5.1/en/create-table.html (на английском языке, но для более поздней версии).
Удачи!
--------- «С кем тяжело молчать, с тем не о чем говорить» (Метерлинк)
Ответ отправила: lupus campestris (статус: Профессор) Россия, Москва Тел.: +79060429689 Организация: http://www.orange-business.ru WWW:http://lupus-campestris.blogspot.com/ ICQ: 193918889 ---- Ответ отправлен: 12.02.2007, 01:33 Оценка за ответ: 5
Отвечает: Селев Валерий
Здравствуйте, Королёв Руслан!
Декларация KEY используется для создания индексов таблицы.
Индексы, в свою очередь, испольуются СУБД для бустрого доступа к данным.
Например, если у теб я коде будет много конструкций типа
select * from articles where id_artpage = N (т.е., выборка записи по значению N идентификатора id_artpage, то СУБД не придётся пробегать через всю таблицу, достаточно будет использовать ускоренный поиск по индексу пола id_artpage).
Ответ отправил: Селев Валерий (статус: 3-ий класс)
Ответ отправлен: 12.02.2007, 10:59 Оценка за ответ: 5 Комментарий оценки: Спасибо, всё понятно.