2016-05-27 23 views
1

私は大きな問題を繰り返しています。これらの2つのクエリは、今日レストランが開いているかどうかを確認するために役立ちます。私の問題はレストランID 1-5(もっと将来的には)です。しかし、ループはレストランID 5を取得するようだ。私はここで多くの記事を読んでいると私は正しいことをやっているようだ。しかし、私は他のレストランのIDを取得するためにループするように見えることはできません。PHP:ループループの結果セット

私は今ブロックされています。初心者は非常に提案やアドバイスを受けています。

$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>"; 
} 
+1

、あなたのレストランを紹介ループ、新しいID値と '$ rest_'たびに上書きされます。たぶん、あなたのコードの最後まで、「大きな」ループを広げたいと思っていますか? – Jeff

+0

$ rest_の値は常にループ内の最後の値になるため、ループ内の任意のものを出力したり、出力文字列をビルドしたりすることができます。 $ messageと同じことをします。何を出力したいですか?私達に教えていただけますか?それは多くを助けるでしょう... – Poiz

+0

2つではなく、1つのクエリからすべての情報を取得することがより効果的です。それは、たとえいくつかのレストランのデータが繰り返されても、はるかに効率的になります。 – trincot

答えて

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

     } 
+0

私は驚いています私はとても近かったが、2と2を一緒に置くことができなかった、ありがとう、これとあなたの時間 – user6362696

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>ではありません。

+0

正しい答えが返ってきますが、 'close_time 'を取得している最後のif-elseは動作しません。なぜなら、' $ row_qu'(最大のもの)がないからです。 – Jeff

+0

@Jeffありがとう、他の問題をチェックしていて、それを逃して、今修正されました。 – Tigger

+1

ええ、解決するいくつかの問題があります... – Jeff