Отправляет email-рассылки с помощью сервиса Sendsay

RFpro.ru: Программирование на PHP

  Все выпуски  

RusFAQ.ru: Программирование на PHP


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / PHP

Выпуск № 599
от 17.02.2007, 04:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 414, Экспертов: 56
В номере:Вопросов: 2, Ответов: 5


Вопрос № 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

надо сделать чтобы выводился список(должно получится меню) вида

Раздел1
подраздел1.1
подраздел1.2
подраздел1.3
Раздел2
подраздел2.1
подраздел2.1
подраздел2.3
Отправлен: 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 - вывод через цикл третьего поля - получите названия подразделов. Чтобы вывести ещё и названия разделов, в цикле следует поставить проверку: если предыдущая запись по первому полю не совпадает с текущей, значит выводим второе поле (т.е. у всех подразделов по группам первое поле будет одинаковым).
Команды подключения к БД я здесь не приводил. А вот как примерно будет выглядеть цикл:
$res = mysql_query('запрос');
for ($i = 0; $i < mysql_num_rows($res); $i++)
{
if (mysql_result($res,$i,0) != mysql_result($res,$i-1,0))
{
print mysql_result($res,$i,1).'<br>';
}
print mysql_result($res,$i,2);
}

P.S. Назовите поля таблиц нормальными именами. Транслит смотрится ужасно, да и ошибиться при написании таких полей легко.
Желаю удачи!
---------
Нет правила без исключений. Правило без исключений - исключение из правил.
Ответ отправил: Ерёмин Андрей (статус: Профессор)
Россия, Тула
WWW: Программирование на Delphi. Всё для программиста. Файловый архив, статьи, помощь, советы, обмен опытом.
ICQ: 286867644
----
Ответ отправлен: 11.02.2007, 10:00

Отвечает: Илья Андреевич
Здравствуйте, 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.
Отправлен: 11.02.2007, 23:46
Вопрос задал: Королёв Руслан (статус: 4-ый класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: 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
Комментарий оценки:
Спасибо, всё понятно.


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
ООО "Мастер-Эксперт Про", Москва, 2007
Авторские права | Реклама на портале
Версия системы: 4.44 beta от 26.01.2007
Яндекс Rambler's Top100

В избранное