簡體   English   中英

PHP:循環遍歷結果集

[英]PHP: Loop looping through result set

我在遍歷結果時遇到了一個巨大的問題,這兩個查詢一起工作,以檢查一家餐廳今天是否營業。 我的問題是我有餐廳,編號1-5(以后會有更多)。 但是循環似乎只獲得了餐廳ID5。我在這里閱讀了很多帖子,看來我在做正確的事。 但我似乎無法循環獲取其他餐廳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>";
}

我認為這就是您想要做的。

// $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>

您可以在循環中輸出任何內容,也可以建立一個輸出字符串,因為$ 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>";
            }       

        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM