Несколько циклов while в цикле while? - PullRequest
1 голос
/ 20 апреля 2011

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

ОБНОВЛЕНИЕ - обновленный код ниже - Спасибо, Филл

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

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

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

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

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

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


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>";

Ответы [ 3 ]

4 голосов
/ 20 апреля 2011

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

Например:

while($row_races = mysql_fetch_array($totalraces)){
while($row_details = mysql_fetch_array($racedetails)){
while($row_card = mysql_fetch_array($racecard)){
1 голос
/ 20 апреля 2011

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

Первый запрос получает количество гонок, выбрав 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'>";

}
1 голос
/ 20 апреля 2011

Я полагаю, что вы могли бы и на практике можете, но while в while в for в while кажется немного выше ...

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...