|
|
|
| Здравствуйте!
Программирую меню сайта PHP/MySQL. Пришлось применить два While-цикла один в другом. Первый находит первую директорию и перестает работать после работы другого. Второй исправно находит все поддиректории. Уже мучаюсь пол дня. Может кто подскажет мою ошибку?
$query = "select * from main";
$query1 = $query;
$categoryes = mysql_db_query($dbname, $query, $link);
$categoryes1 = $categoryes;
while($stroka=mysql_fetch_array($categoryes)) // перебор строк таблицы с начала до конца с целью поиска категорий (["type"] == "0")
{
if ($stroka["type"] == "0"){
echo $stroka["name"]; // Вывод на экран категорий
echo "<br>";
while($stroka1=mysql_fetch_array($categoryes1)) // перебор строк таблицы с начала до конца с целью поиска подкатегорий данной категории (["type"] == "1")
{
if (($stroka1["type"] == "1") and ($stroka1["subtype"] == $stroka["N"])){
echo $stroka1["name"]; // Вывод на экран подкатегорий данной категории
echo "<br>";
}
}
}
}
|
Когда убираю второй цикл (начиная с while и включая две фигурные скобки), первый цикл проигрывается до конца. | |
|
|
|
|
|
|
|
для: vidal
(01.08.2010 в 01:24)
| | Ошибка, наверное, в непонимании смысла вот этой строки:
$categoryes1 = $categoryes;
|
Тут не происходит копирования результата запроса, вы двумя циклами перебираете один и тот же набор результата запроса, внешнему циклу всегда достаётся только первый ряд, остальное выбирается внутренним циклом, как только он получает управление.
> // перебор строк таблицы с начала до конца с целью поиска категорий (["type"] == "0")
Отбором данных должна заниматься СУБД, насколько это возможно. | |
|
|
|
|
|
|
|
для: sms-send
(01.08.2010 в 01:30)
| | Я думаю здесь все правильно. Это я делаю новые переменные для второго While-цикла | |
|
|
|
|
|
|
|
для: vidal
(01.08.2010 в 01:34)
| | Смешно =)
А я так не думаю.
> Уже мучаюсь пол дня.
> Я думаю здесь все правильно.
Как то не сходится.
Попробуйте посмотреть что выводит этот код:
// <?php
header('Content-Type: text/plain');
$sql_query = 'SELECT 123 FROM `main`';
$q1 = mysql_query($sql_query);
$q2 = $q1; // "делаю новые переменные для второго While-цикла"
$n = 0;
echo "Начало первого цикла\n";
while($row1 = mysql_fetch_row($q1))
echo "q1: Ряд ".($n++)."\n";
echo "Конец первого цикла\n";
$n = 0;
echo "Начало второго цикла\n";
while($row2 = mysql_fetch_row($q2))
echo "q2: Ряд ".($n++)."\n";
echo "Конец второго цикла\n";
|
Потом замените строчку
на
$q2 = mysql_query($sql_query);
| и посмотрите на вывод ещё раз.
Обязательно читать SELECT Syntax, особенно по части ключевого слова WHERE. И сюда заглянуть не помешает: JOIN Syntax. | |
|
|
|
|
|
|
|
для: sms-send
(01.08.2010 в 01:30)
| | Спасибо всем за небезразличие. Проблема решена следующим способом:
$query = "select * from main";
$query1 = $query;
$categoryes = mysql_db_query($dbname, $query, $link);
while($stroka=mysql_fetch_array($categoryes)) // перебор строк таблицы с начала до конца с целью поиска категорий (["type"] == "0")
{
if ($stroka["type"] == "0"){
echo $stroka["name"]; // Вывод на экран категорий
echo "<br>";
$categoryes1 = mysql_db_query($dbname, $query, $link);
while($stroka1=mysql_fetch_array($categoryes1)) // перебор строк таблицы с начала до конца с целью поиска подкатегорий данной категории (["type"] == "1")
{
if (($stroka1["type"] == "1") and ($stroka1["subtype"] == $stroka["N"])){
echo $stroka1["name"]; // Вывод на экран подкатегорий данной категории
echo "<br>";
}
}
}
}
|
sms-send, neadekvat спасибо! Вы открыли мне глаза! $categoryes1 = $categoryes -этого не стоило делать, а получить данные самостоятельно для $categoryes1. | |
|
|
|
|
|
|
|
для: vidal
(01.08.2010 в 01:24)
| | > mysql_db_query
Она все-таки существует :)
$categoryes = mysql_db_query($dbname, $query, $link);
$categoryes1 = $categoryes;
while($stroka=mysql_fetch_array($categoryes))
while($stroka1=mysql_fetch_array($categoryes1))
|
А теперь давайте подставим вместо переменных свои значения, итого:
while($stroka=mysql_fetch_array(mysql_db_query($dbname, "select * from main", $link)))
while($stroka1=mysql_fetch_array(mysql_db_query($dbname, "select * from main", $link)))
|
Так понятнее, что вы делаете на самом деле? | |
|
|
|