Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Некрасивое решение :(

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Zuldek
Отправлено: 05 Ноября, 2010 - 20:39:50
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июнь 2010  


Помог: 50 раз(а)




Всем здравствуйте.
Кроплю над страницей вывода пунктов меню навигации.
Задача вроде бы решена, но, совсем не рационально Недовольство, огорчение Прошу более опытных форумчан взглянуть на решение.
есть 3 таблицы

menu
---------------------
num | part_art | id

num - порядковый номер пункта меню для вывода на сайте
part_art - хранит тип страницы на которую ведёт пункт меню (1/0 - раздел/статья)
id - идентификатор статья или раздела. Равен id_article из таблицы статей для статьи либо id_artpage из таблицы разделов, соответственно для раздела.

aricle
-------------------
id_article | name

artpage
---------------------
id_artpage | name

Результатом работы скрипта должна стать -
таблица - порядок отображения пунктов меню на сайте
1 РазделN
2 СтатьяN
3 СтатьяС
4 РазделA
...

Моё решение:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. <?
  3. //Соединяемся с бд
  4. require_once($_SERVER["DOCUMENT_ROOT"]."/admin/config.php");
  5. //Количество пунктов меню которые разрешено вывести $pos_number
  6. $pos_number = 5;
  7. //Извлекаем всё из таблицы menu
  8. $query= "Select from menu";
  9. $one= mysql_query($query);
  10. if (!$one)
  11. {
  12. echo mysql_error();
  13. }
  14. else
  15. {
  16. //Если извлечение успешно, то помещаем результат в массив
  17. $menu = mysql_fetch_assoc($one);
  18. }
  19. ?>
  20. //Таблица вывода значений пунктов меню
  21. <table>
  22. <?
  23. //Начало цикла вывода пунктов меню, количество проходов равно количеству пунктов меню в переменной $pos_number
  24. for ($i=1; $i<= $pos_number; $i++)
  25. {
  26. //Проверяем стратус страницы на которую ведёт пункт меню. Если Раздел/Статья, то извлекаем данные из таблицы разделов/статей
  27. //Если раздел, выводим в строку порядковый номер пункта меню и название радела
  28. if($menu['part_art']=1)
  29.         {
  30.                 $query = sptintf("Select name from artpage where id_artpage = %d", $menu['id']);
  31.                 $zapros = mysql_query($query);
  32.                 if(!$zapros) puterror (mysql_error());
  33.                 $menu_name = mysql_fetch_assoc($zapros);
  34.                 echo "<td>".$menu['num']."</td><td>".$menu_name['name']."</td></tr>";
  35.         }
  36. //Если статья, выводим в строку порядковый номер пункта меню и название статьи
  37. else
  38.         {
  39.                 $query = sptintf("Select name from articles where id_article = %d", $menu['id']);
  40.                 $zapros = mysql_query($query);
  41.                 if(!$zapros) puterror (mysql_error());
  42.                 $menu_name = mysql_fetch_assoc($zapros);
  43.                 echo "<td>".$menu['num']."</td><td>".$menu_name['name']."</td></tr>";          
  44.         }
  45. }
  46. </table>
  47. ?>

Решение мне кажется не изящным в части постоянных запросов к бд в ходе выполнения цикла.
и, таблица выводится не отсортированной по номеру пунктов меню.
Более опытные форумчане поскажите как правильно построить скрипт, особенно SQL запрос на выбору сразу всех значений из обеих таблиц..

(Добавил)
То есть нужно извлекать значения полей name из таблиц разделов и статей, так чтобы id таблицы меню был равен id_artpage или id_article, поскольку в меню может попасть и раздел и статья...
CODE (htmlphp):
скопировать код в буфер обмена
  1. sprintf("Select name from artpages, articles where %d = id_artpage or %d = id_article", menu[id])

правильно?

(Отредактировано автором: 05 Ноября, 2010 - 22:42:49)

 
 Top
DlTA
Отправлено: 05 Ноября, 2010 - 21:30:16
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




а это все правильно работает?
 
 Top
Zuldek
Отправлено: 05 Ноября, 2010 - 21:40:34
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июнь 2010  


Помог: 50 раз(а)




DlTA пишет:
а это все правильно работает?


Не тестировал, но не суть, - логика правильная.. и чувствую что можно сделать всё проще и изящнее (Если вы про ошибочки в синтаксисе небольшие Закатив глазки )

(Отредактировано автором: 05 Ноября, 2010 - 21:41:46)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB