Несколько циклов while внутри цикла while?

Всего новичок пытается учиться … спасибо за всю помощь до сих пор!

UPDATE – обновленный код ниже – Спасибо Фил

Теперь я пытаюсь получить соответствующую информацию о horses с настольных horses которыми я могу присоединиться к race_form с полем horse_name. Затем я хочу отобразить информацию для каждой лошади в гонке ниже ($ racecard). Это делает это немного яснее?

Я думал, что могу просто сделать еще один запрос, а затем цикл while с mysql_fetch_array под тем, который у меня уже есть, и который отобразит его, а затем переместится на следующую гонку, но это, по-видимому, не работает …?!

Мне интересно, можете ли вы запустить 2 в цикле после друг друга внутри цикла? Я работаю на коньках с конным спортом – я могу отображать каждый список расы, но под ним я хочу отображать отдельные детали лошади на каждой лошади в гонке. В любом случае, если вы посмотрите на эту страницу, вы увидите, что я пытаюсь сделать:

http://tasmanianracing.com/superform/formguide.php?meetingID=21042011LAUN&Submit=View+Form

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

Я надеюсь, что это достаточно ясно … мой фрагмент кода ниже – пожалуйста, дайте мне знать, если я пропустил что-то важное:


 echo "<table width='990' border='1' cellspacing='2' cellpadding='2'>"; $racedetails = mysql_query("SELECT * FROM race_info WHERE meetingID = ('" . $safemeetingID . "')"); while($row = mysql_fetch_array($racedetails)) { echo "<tr><td>Race " . $row['race_number'] . " at " . $row['start_time'] . " " . $row['class'] . " over " . $row['distance'] . "m</td></tr>"; $racecard = mysql_query("SELECT * FROM race_form INNER JOIN race_info ON race_form.raceID = race_info.raceID WHERE race_form.raceID = ('" . $row['raceID'] . "')"); while($row = mysql_fetch_array($racecard)) { echo "<tr><td>" . $row['number'] . "</td><td>" . $row['past10'] . "</td><td>" . $row['horse_name'] . "</td></tr>"; } echo "</table><br>"; echo "<br>I wish I could put in some horse form here...<br>"; echo "<table width='990' border='1' cellspacing='2' cellpadding='2'>"; } echo "</table>"; 

Solutions Collecting From Web of "Несколько циклов while внутри цикла while?"

Я думаю, вы можете избавиться от одного из своих запросов:

Первый запрос получает количество гонок, выбирая COUNT. Это возвращает одну запись со значением count.

 // This returns one record with the count $total_races = "SELECT COUNT(race_number) AS totalraces FROM race_info WHERE meetingID = ('".$safemeetingID."') "; 

Затем вы перебираете те же записи, что и строки, возвращаемые для деталей гонки, такие же, как и счет.

 // This looks to return the record(s) with the race details $race_details = "SELECT * FROM race_info WHERE meetingID = ('" . $safemeetingID . "')"; 

Я думаю, вы можете просто использовать это, чтобы получить желаемые результаты: (Я соглашаюсь переименовать переменную $ row в какой-то описательный для каждого цикла while)

 $racedetails = mysql_query("SELECT * FROM race_info WHERE meetingID = ('" . $safemeetingID . "')"); while($details_row = mysql_fetch_array($racedetails)) { echo "<tr><td>Race " . $details_row['race_number'] . " at " . $details_row['start_time'] . " " . $details_row['class'] . " over " . $details_row['distance'] . "m</td></tr>"; $racecard = mysql_query("SELECT * FROM race_form INNER JOIN race_info ON race_form.raceID = race_info.raceID WHERE race_form.raceID = ('" . $details_row['raceID'] . "')"); while($rc_row = mysql_fetch_array($racecard)) { echo "<tr><td>" . $rc_row['number'] . "</td><td>" . $rc_row['past10'] . "</td><td>" . $rc_row['horse_name'] . "</td></tr>"; } echo "</table><br>"; echo "Testing<br>Testing<br>I wish I could put in some horse form here...<br>"; echo "<table width='990' border='1' cellspacing='2' cellpadding='2'>"; } 

NOT TESTED / PSEUDO CODE

 "SELECT * FROM horses AS h, INNER JOIN race_info AS ri ON race_form.raceID = race_info.raceID WHERE horse_name IN ( SELECT horse_name FROM race_form AS srf WHERE h.horse_name = srf.horse_name ) AND race_form.raceID = ('" . $details_row['raceID'] . "')" 

Идея состоит в том, чтобы объединить два запроса в один, я знаю, что это не правильный синтаксис, но он может дать вам представление о том, как это сделать.

Или вы можете сделать еще один запрос в цикле для имен лошадей

 $racedetails = mysql_query("SELECT * FROM race_info WHERE meetingID = ('" . $safemeetingID . "')"); while($details_row = mysql_fetch_array($racedetails)) { echo "<tr><td>Race " . $details_row['race_number'] . " at " . $details_row['start_time'] . " " . $details_row['class'] . " over " . $details_row['distance'] . "m</td></tr>"; $racecard = mysql_query("SELECT * FROM race_form INNER JOIN race_info ON race_form.raceID = race_info.raceID WHERE race_form.raceID = ('" . $details_row['raceID'] . "')"); while($rc_row = mysql_fetch_array($racecard)) { echo "<tr><td>" . $rc_row['number'] . "</td><td>" . $rc_row['past10'] . "</td><td>" . $rc_row['horse_name'] . "</td></tr>"; $horses = mysql_query("SELECT * FROM horses WHERE horse_name = ('" . $rc_row['horse_name'] . "')"); while($horse_row = mysql_fetch_array($horses)) { // echo horse details here } } echo "</table><br>"; echo "Testing<br>Testing<br>I wish I could put in some horse form here...<br>"; echo "<table width='990' border='1' cellspacing='2' cellpadding='2'>"; } 

Вероятно, вам нужно будет изменить имена некоторых переменных $row , они могут мешать друг другу.

Например:

 while($row_races = mysql_fetch_array($totalraces)){ while($row_details = mysql_fetch_array($racedetails)){ while($row_card = mysql_fetch_array($racecard)){ 

Теория я мог бы и на практике вы можете, но через некоторое while в for некоторого while кажется немного выше …

Я уверен, что мы можем помочь вам сделать его более эффективным, если вы объясните, что именно вы пытаетесь сделать.