Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.07.2012, 18:15   #1
slovoblydie
 
Регистрация: 17.07.2012
Сообщений: 4
Счастье Использование циклов while в while`e ...

столкнулся с проблемой использования двух while, т.е. один в другом...
сразу кусок кода:
PHP код:
$sql_cat "SELECT `id`, `name`, `full_name` FROM `category` ";  
$cat mysql_query($sql_cat); 
while (
$c mysql_fetch_array($cat)) { 

echo (
" <div class=accordion-toggle>$c[0]$c[1]</div> ");

$sql "SELECT `id`, `cat`, `number`, `cod`, `name`, `price`, `link` FROM `price` WHERE cat=$c[0]";  
$price mysql_query($sql); 
while (
$n mysql_fetch_array($price)) { 

echo (
"
<div class=accordion-content>
$n[2] $n[3]
"
);
if ( 
$n["link"] == "on") {  echo ("<a href=/item.php?number=$n[2]>$n[4]</a>"); }  else {  echo ("$n[4]"); } 
echo (
"
$n[5]
</div>
"
);


итак что мы имеем: две выборки из базы и два цикла.. при этом второй цикл зависит от первого ..
Какой получается результат: первым while`м выводятся все строки за БД - так и должно быть .. зато когда дело доходит до второго while`а выводятся только первые строки ..
Другими словами: каждому id из первой выборки соответствуют несколько id из второй выборки .. и эти несколько строк должны вторым while`ом подхватываться.. но к сожалению не могу понять почему не подхватываются ((

заранее сенькью вери мач-)
slovoblydie вне форума Ответить с цитированием
Старый 17.07.2012, 20:21   #2
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,160
По умолчанию

изначально неверно в циклах делать запросы к БД... сформулируйте задачу - что есть на входе и что хотите на выходе
ADSoft вне форума Ответить с цитированием
Старый 17.07.2012, 20:27   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

сделай обьединение и не парься
Код:
$sql_cat = "SELECT"
 +" c.`id`, c.`name`, c.`full_name`, p.`number`, p.`cod`, p.`name`, p.`price`, p.`link`"
 +" FROM `category` c join price p on (p.cat=c.id)";  
$cat = mysql_query($sql_cat); 
while ($c = mysql_fetch_array($cat)) {
 echo (" <div class=accordion-toggle>$c["full_name"]. $c[1]</div> ");
 echo (" <div class=accordion-content>$c[3] $n[4]");
 if ( $n["link"] == "on") {  
  echo ("<a href=/item.php?number=$c[1]>$c[5]</a>"); 
 }  else {  echo ("$c[5]"); } 
 echo ("$c["price"]</div>");
} 
}
Я может с полями напутал, но смысл в том чтоб свести два запроса воедино.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 19.07.2012, 12:55   #4
slovoblydie
 
Регистрация: 17.07.2012
Сообщений: 4
По умолчанию

Люди! Спасибо Вам за отзывчивость и потраченное время ..
проблему решил, точнее нашел откуда она вылезла.. дело в том что у меня div`ы с классами) и это все работает с на яве.. ну типа раздвигающийся список-) вот если джабу отключаю - всё работает ..как только снова включаю - идет вывод только первых строк..

Цитата:
Сообщение от ADSoft Посмотреть сообщение
изначально неверно в циклах делать запросы к БД... сформулируйте задачу - что есть на входе и что хотите на выходе
кстати а почему ведь мой вариант работает..
Вариант комрада Stilet также замечательно работает, за его вариант спасибо)
slovoblydie вне форума Ответить с цитированием
Старый 19.07.2012, 13:44   #5
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,160
По умолчанию

вариант будет работать даже если ты вообще без циклов 1000 тыщ раз напишешь строки вывода из бд.... технологически не верно.... будет большой цикл..... например 1000 итераций..... вот тебе 1000 запросов к БД.... для простейшего вывода... и везде так.... у тебя и БД будет падать и скорость работы не очень
ADSoft вне форума Ответить с цитированием
Старый 19.07.2012, 16:10   #6
slovoblydie
 
Регистрация: 17.07.2012
Сообщений: 4
По умолчанию

Цитата:
Сообщение от ADSoft Посмотреть сообщение
вот тебе 1000 запросов к БД....
аа.. ну так если говорить о таких больших количествах операций.. то естественно .. ) я думал мало ли может что-то ещё..
slovoblydie вне форума Ответить с цитированием
Старый 20.07.2012, 12:23   #7
chyvakoff
Пользователь
 
Аватар для chyvakoff
 
Регистрация: 10.12.2011
Сообщений: 91
По умолчанию

Цитата:
Сообщение от slovoblydie Посмотреть сообщение
аа.. ну так если говорить о таких больших количествах операций.. то естественно .. ) я думал мало ли может что-то ещё..
Ещё то, что ты привыкнешь запросы в циклах делать,и в один прекрасный момент тебя за такое пошлют лесом.
Лучше сразу напряги мозги и делай на JOIN`ах..
chyvakoff вне форума Ответить с цитированием
Старый 20.07.2012, 12:44   #8
slovoblydie
 
Регистрация: 17.07.2012
Сообщений: 4
По умолчанию

Цитата:
Сообщение от chyvakoff Посмотреть сообщение
Ещё то, что ты привыкнешь запросы в циклах делать,и в один прекрасный момент тебя за такое пошлют лесом.
Лучше сразу напряги мозги и делай на JOIN`ах..
это я уже понял) все логично и правильно сказал ты ) логика и правильность в том чтобы не писать гавнокод, а писать корректно ..
slovoblydie вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Использование трех видов циклов tondo Помощь студентам 1 26.04.2012 01:42
Организация циклов. лесяя Паскаль, Turbo Pascal, PascalABC.NET 5 10.06.2011 03:38
Операторы циклов while, for ISV-777 Помощь студентам 2 25.11.2010 13:00
3 вида циклов mind rebel Фриланс 11 05.03.2010 15:19
Visual Basic Использование циклов melani Помощь студентам 2 29.03.2009 20:54