开发者

While loop problems

开发者 https://www.devze.com 2023-01-03 18:46 出处:网络
I have put together the following code, the problem is that each while loop is only returning one set of data.

I have put together the following code, the problem is that each while loop is only returning one set of data.

$result = mysql_query("SELECT date FROM ".TBL_FIXTURES." WHERE compname = '$comp_name' GROUP BY date");
    $i = 1;
    echo "<table cellspacing=\"10\" style='border: 1px dotted' width=\"300\" bgcolor=\"#eeeeee\">";
    while ($row = mysql_fetch_assoc($result)) 
    {
        $date=date("F j Y", $row['date']);
        echo $date;

        echo "
        <tr>
        <td>Fixture $i - Deadline on $date</td>
        </tr>
        ";
        $result = mysql_query("SELECT * FROM ".TBL_FIXTURES." WHERE com开发者_Python百科pname = '$comp_name' AND date = '$row[date]' ORDER BY date");
        while ($row = mysql_fetch_assoc($result))
        {
            extract ($row);
            echo "
            <tr>
            <td>$home_user - $home_team V $away_user - $away_team</td>
            </tr>
            ";
        }
        $i++;

    }
    echo "</table>";

I should get many dates, and then each set of fixture below. At the moment, the first row from the first while loop is present, along with the data from the second while loop.

However, it doesn't continue? Any ideas where I can correct this? Thanks


Replace
$result = mysql_query("SELECT * FROM ".TBL_FIXTURES." WHERE compname = '$comp_name' AND date = '$row[date]' ORDER BY date");
while ($row = mysql_fetch_assoc($result))
with

  $result1 = mysql_query("SELECT * FROM ".TBL_FIXTURES." WHERE compname = '$comp_name' AND date = '$row[date]' ORDER BY date");  
  while ($row = mysql_fetch_assoc($result1))`

What happens with your current code is that after executing internal while, next call (in external loop)to mysql_fetch_assoc($result) always returns false (because you just iterated through it in internal loop). All you need is to use a different variable in internal loop.


You're overwriting the $result variable. Change the second one to $result2 or something and see what happens. Make sure you do it when you set the variable, and use it in the query.


You are changing your $result variable in your loop so it is at the end after the inner while loop has run.


you just mixing variables. second result and row should be named differently.

though it would be better to make it with one single query


Well you've got the answer to your question.

I just want to add that usually you can write a smarter SQL query and manage without an inner query with it's loop. And your code will work a lot faster if you'll have 1 query instead of N+1.

LEFT JOIN usually can be used to replace inner looping. Example:

SELECT DISTINCT A.date, B.* FROM table_fixtures A 
LEFT JOIN table_fixtures B ON A.date = B.date 
WHERE B.compname = "a value"

However this time it looks illogical. I think what you actually do is achievable with a simple query like this:

SELECT * FROM table ORDER WHERE compname="something" ORDER BY date


You are reusing the same variables over for your inner loop and its breaking the outer loop.

Change your inner loop to something like:

$result2 = mysql_query("SELECT * FROM ".TBL_FIXTURES." WHERE compname = '$comp_name' AND date = '$row[date]' ORDER BY date");
while ($row2 = mysql_fetch_assoc($result2))
{
    extract ($row2);
    echo "
    <tr>
    <td>$home_user - $home_team V $away_user - $away_team</td>
    </tr>
    ";
}


On a different note - why do you have a GROUP BY date in the first row, when all you have in the projection list is the date?

0

精彩评论

暂无评论...
验证码 换一张
取 消