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 :: 2xselect and mysql

 PHP.SU

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


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

> Без описания
E-Pro
Отправлено: 30 Декабря, 2008 - 10:35:50
Post Id



Частый гость


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


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




Иногда бывает такое, что называется тупняк)))
Вывожу в select две подкатегории из бд, один запрос попадает под цикл, т.е. выполняется столько раз, сколько и категорий в базе.

PHP:
скопировать код в буфер обмена
  1. $go = $db->sql_query("SELECT `cid`,`name` FROM `".$prefix."_cat`");
  2. $content .= "<select class=\"type\" id=\"auto\" onchange=\"downForm('auto');\" name=\"auto\">";
  3. while(list($cid, $name) = $db->sql_fetchrow($go)){
  4. $content .= ("<option style=\"background-color:#e1e1e1; font-weight:bold;\" value=\"$name\">$name</option>\n");
  5.         $gos = $db->sql_query("SELECT `did`,`name`,`cat` FROM `".$prefix."_cat_d` WHERE cat='$cid'");
  6.         while(list($did, $name2, $cat) = $db->sql_fetchrow($gos)){
  7.                 $content .= ("<option value=\"$did\" class=\"bgcolor1\">$name2</option>\n");
  8.         }
  9. }
  10. $content .= "</select>";
  11. return ($content);
  12.  
 
 Top
Champion Супермодератор
Отправлено: 30 Декабря, 2008 - 11:04:39
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


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




select c.cid, c.name, d.name, d.did from cat c, cat_d d where d.cat = c.cid.
Один запрос и цикл по нему
 
 Top
E-Pro
Отправлено: 30 Декабря, 2008 - 12:01:55
Post Id



Частый гость


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


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




Впринципе сделал
PHP:
скопировать код в буфер обмена
  1. $go = $db->sql_query("SELECT a.cid, a.name, b.did, b.name, b.cat FROM ".$prefix."_cat AS a, ".$prefix."_cat_d AS b WHERE a.cid=b.cat");

Но есть одно НО.
Получается что сначало выводится одна категория, а в ней подразделы
В данной ситуации получается Раздел, имя, раздел имя...чередуется
PHP:
скопировать код в буфер обмена
  1.  
  2. ### Цикл
  3. while(list($cid, $name, $did, $name2, $cat) = $db->sql_fetchrow($go)){
  4. ### Категория
  5. $content .= ("<option style=\"background-color:#e1e1e1; font-weight:bold;\" value=\"$name\">$name</option>\n");
  6. ### Подразделы
  7. $content .= ("<option value=\"$did\" class=\"bgcolor1\">$name2</option>\n");
  8. ###
  9. }
  10. $content .= "</select>";
  11.  
 
 Top
Champion Супермодератор
Отправлено: 30 Декабря, 2008 - 12:07:32
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


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




Ну, во-первых, вам нужно только одно из полей cat или cid. Во-вторых, не совсем понял что вы имеете в виду, но php есть оператор if. Вы с его помощью можете анализировать данные из выборки, и если вам надо, изменять способ вывода. И чтобы не чередовалось, в sql есть команда order by...
(Добавление)
Т.е. храните предыдущий cid и смотрите. Если он обновился, то выводите то, что у вас было до второго while...
 
 Top
E-Pro
Отправлено: 30 Декабря, 2008 - 12:21:18
Post Id



Частый гость


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


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




Сортировку по id номеру я сделал, это само собой.
Вот что получается
Прикреплено изображение
type.PNG
 
 Top
Botik
Отправлено: 30 Декабря, 2008 - 16:27:40
Post Id



Новичок


Покинул форум
Сообщений всего: 30
Дата рег-ции: Дек. 2008  
Откуда: Чебоксары


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




По моему просто запрос должен был быть таким:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $go = $db->sql_query('SELECT cid, name FROM '.$prefix.'_cat WHERE cid = 0;');
  3. ?>

(Отредактировано автором: 30 Декабря, 2008 - 16:31:24)

 
 Top
Champion Супермодератор
Отправлено: 30 Декабря, 2008 - 16:34:48
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


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




E-Pro,
CODE (text):
скопировать код в буфер обмена
  1. $name_pre = '-498';
  2. while(list($cid, $name, $did, $name2, $cat) = $db->sql_fetchrow($go)){
  3. ### Категория
  4. if ($name != $name_pre)
  5. $content .= ("<option style=\"background-color:#e1e1e1; font-weight:bold;\" value=\"$name\">$name</option>\n");
  6. ### Подразделы
  7. $content .= ("<option value=\"$did\" class=\"bgcolor1\">$name2</option>\n");
  8. $name_pre = $name;
  9. ###
  10. }
 
 Top
E-Pro
Отправлено: 30 Декабря, 2008 - 22:46:44
Post Id



Частый гость


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


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




Champion, Спасибо)
 
 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