PHP:循环遍历结果集

时间:2016-05-27 23:22:45

标签: php mysql

我有一个很大的问题循环结果,这两个查询携手合作,检查一家餐馆今天是否开放。我的问题是我有餐馆,身份1-5(未来更多)。但循环似乎只获得餐厅ID 5.我在这里阅读了很多帖子,看起来我做的是正确的事情。但我似乎无法循环获得其他餐馆的ID。

我现在被封锁了,对任何建议或建议非常开放的新手。

$sel = "SELECT Rest_Details.Resturant_ID,Delivery_Pcode.Pcode,Delivery_Pcode.Restaurant_ID 
FROM Rest_Details INNER JOIN Delivery_Pcode
ON Delivery_Pcode.Restaurant_ID=Rest_Details.Resturant_ID
WHERE Delivery_Pcode.Pcode LIKE'$searchP'";
$res = $dbc->query($sel);

if (!$res) {
    echo "invalid query '" . mysqli_error($dbc) . "\n";
}
$i=1;
while ($row_res = $res->fetch_array()) {
    $rest_ = $row_res['Resturant_ID'];
    $i++;
}

date_default_timezone_set("Europe/London");

$daynum = jddayofweek(unixtojd());

$query = "SELECT *
FROM Opening_hrs WHERE
Restaurant_ID = $rest_
AND Day_of_week = $daynum";

$run_qu = $dbc->query($query);

if ($run_qu->num_rows > 0) {
    while ($row_qu = $run_qu->fetch_assoc()) {
       $message = "open" . $row_qu["Open_time"] . "</br>";
    }
} else {
    $message = $message . "close" . $row_qu["Closing_time"] . "</br>";
}

2 个答案:

答案 0 :(得分:1)

我认为这就是你要做的。

// $searchP should be checked to prevent SQL injection. 
$sel = "SELECT Rest_Details.Resturant_ID, Delivery_Pcode.Pcode,
        Delivery_Pcode.Restaurant_ID 
        FROM Rest_Details INNER JOIN Delivery_Pcode 
            ON Delivery_Pcode.Restaurant_ID = Rest_Details.Resturant_IDW
        WHERE Delivery_Pcode.Pcode LIKE '$searchP'";
$res = $dbc->query($sel);

if (!$res) {
    echo "invalid query '" . mysqli_error($dbc) . "\n";
}

// set these once as they don't change
date_default_timezone_set("Europe/London");
$daynum = jddayofweek(unixtojd());

// $i=1; - not required, never used
// loop over the original results
while ($row_res = $res->fetch_array()) {
    $rest_ = $row_res['Resturant_ID'];
    //$i++; not used

    // check for a match 
    $query = "SELECT * FROM Opening_hrs 
             WHERE Restaurant_ID = $rest_
             AND Day_of_week = $daynum";

    $run_qu = $dbc->query($query);

    if ($run_qu->num_rows > 0) {
        // at least one match
        while ($row_qu = $run_qu->fetch_assoc()) {
            $message = "open" . $row_qu["Open_time"] . "<br />";
            $message .= "close" . $row_qu["Closing_time"] . "<br />";
        }
    } else {
        // no matches
        $message = "No results for <i>$daynum</i>.";
    }
}

应该可以在单个查询中获取详细信息,但我需要查看您的SQL表(并且您也没有要求:)。

此外,它是<br><br />,而不是</br>

答案 1 :(得分:1)

你可以在你的循环中输出你想要的任何东西,或者建立一个输出字符串,因为$ rest_的值总是循环中的最后一个值,我不认为这是你想要的......你正在用$ message做同样的事情。而且我愿意打赌这就是你想要做的事情:

        <?php 
        date_default_timezone_set("Europe/London");

        $sel = "SELECT Rest_Details.Resturant_ID,Delivery_Pcode.Pcode,Delivery_Pcode.Restaurant_ID 
                 FROM Rest_Details INNER JOIN Delivery_Pcode
                 ON Delivery_Pcode.Restaurant_ID=Rest_Details.Resturant_ID
                 WHERE Delivery_Pcode.Pcode LIKE'$searchP'";
        $res = $dbc->query($sel);

        if (!$res) {
            echo "invalid query '" . mysqli_error($dbc) . "\n";
        }

        $i=1;

        while ($row_res = $res->fetch_array()) {
            $rest_ = $row_res['Resturant_ID'];
            $i++;       // <== YOU DON'T NEED THIS VARIABLE....

            // GET THE DATES WITHIN THE LOOP...     
            $daynum = jddayofweek(unixtojd());      
            $query  = "SELECT *
                 FROM Opening_hrs WHERE
                 Restaurant_ID = $rest_
                 AND Day_of_week = $daynum";

            $run_qu = $dbc->query($query);

            if ($run_qu->num_rows > 0) {
                while ($row_qu = $run_qu->fetch_assoc()) {
                    $message = "open" . $row_qu["Open_time"] . "</br>";
                }
            } else {
                $message = $message . "close" . $row_qu["Closing_time"] . "</br>";
            }       

        }