Вложенный цикл пока пропускает первый результат - PullRequest
0 голосов
/ 11 марта 2011

Мне нужно запросить таблицу MySQL, чтобы затем получить список имен, основываясь на этом списке имен, связанных с ним отчетов о запросах.Вот мой код:

//query the peoples

$query_people = mysql_query("SELECT * FROM people ORDER BY people_name ASC")
while($fetch_people = mysql_fetch_array($query_people)){
    $people_id = $fetch_people[people_id];
$people_name = $fetch_people[people_name];
$query_report = mysql_query("SELECT * FROM report WHERE report_entity = '$people_name'");

    // output each person's name
    echo($people_id.$people_name);

    //get their reports
    while($fetch_report = mysql_fetch_array($query_report)){
    $report_id = $fetch_report[report_id];
    $report_type = $fetch_report[report_type];
    $report_narr = $fetch_report[report_narr]; 
    echo($report_narr);
   }
} 
?>

Когда он выводит, я получаю это:

1Bill

2Bob "Повествование Билла"

3Tom "Повествование Боба"

4" Повествование Тома "

Есть мысли о том, почему он пропускает запрос Билла во вложенном цикле?

Ответы [ 3 ]

1 голос
/ 11 марта 2011

Насколько я понимаю, вы не можете гарантировать выполнение операторов mysql в порядке выполнения транзакций.Вместо этого я бы использовал соединение, оно будет быстрее, чем вложенные циклы с запросами mysql внутри них.

$query = "
    SELECT * FROM `people`
    JOIN `report`
    ON `report`.`report_entity` = `people`.`people_name`
    ORDER BY `people`.`people_name` ASC
";

$result = mysql_query($query);

while($row = mysql_fetch_array($result)) {
    echo $row['report_narr'];
}
1 голос
/ 11 марта 2011

По какой-то причине я не могу комментировать ваш вопрос, поэтому вместо этого я опубликую ответ.Похоже, у вас какая-то проблема с индексом.

Как видите, «Повествование Билла» печатается с Бобом, а «Повествование Боба» печатается с Томом.Кроме того, у вас нет повествования с Биллом, и у вас есть только повествование с индексом 4. Однако, поскольку вы не используете индексы для выполнения каких-либо ваших запросов, это может быть одной из двух вещей:

1)Данные в таблице хранятся неправильно.

2) Запросы, которые вы выполняете, не возвращают то, что вы ожидаете.

Для обоих вариантов попробуйте выполнить именно те запросы, которые вы разместили в своем коде.в MySQL и посмотреть, если данные, что вы ожидаете.Кроме того, попробуйте добавить больше эхо-операторов, таких как $people_id и $people_name.И повторите второй SQL-оператор, который создает $query_report, убедитесь, что это именно то, что вы ожидаете.

Наконец, убедитесь, что вы входите во вложенный цикл while, напечатав что-то, что всегда будет отображаться, или добавив кавычки к существующему оператору echo:

echo "'" . $report_narr . "'";

Таким образом, вы знаете, чтонаименее вошел в цикл и запрос вернул результаты.В противном случае ваша база данных может быть размещена не так, как вы думаете.

0 голосов
/ 22 марта 2011

Ну, у меня нет объяснения этому - я начал с нуля, и это сработало. Спасибо всем за помощь!

...