2

時間単位でリソースを予約するために使用されるシステムを開発しています。たとえば、時間単位で会議室を予約するなどです。私はほとんどすべての機能を動作させていますが、いくつかは完全にはほど遠いものであり、私が持っている機能の 1 つが私を悩ませています。1 週間分のリソースを予約しています。私のコードは以下のとおりですが、より効率的にするための助けをいただければ幸いです。

ありがとう!

スティーブ

function bookweek($week) {
global $deskid, $date, $time, $member_id, $bookingTimes, $day0, $day1, $day2, $day3, $day4, $day5, $day6, $day7, $day8, $day9, $day10, $day11, $day12, $day13;

dbconnect();

switch($week) {
    case 1: 
        $dupecheck = mysql_query("SELECT * FROM booked where deskid='$deskid' AND date>='$day0' AND date <'$day7'");        
        if (mysql_num_rows($dupecheck) == 0) 
        {
            for($j = 0; $j< 7; $j++) 
            {   
                $daynumber=$j;
                $testing = "day".$daynumber;
                $daytotal= $$testing;
            for($i = 1; $i < count($bookingTimes)+1; $i++) 
            {
                $sql="INSERT INTO booked (date, time, deskid, member_id) VALUES ('$daytotal', '$i', '$deskid', '$member_id')";
                    $result = mysql_query($sql);
                    if (!$result) {
                        die('Invalid query: ' . mysql_error());
                    }
            }
            }
        }
        break;
    case 2:
        $dupecheck = mysql_query("SELECT * FROM booked where deskid='$deskid' AND date > '$day6'");         
        if (mysql_num_rows($dupecheck) == 0) 
        {
            for($j = 0; $j< 7; $j++) 
            {   
                $daynumber=$j+7;
                $testing = "day".$daynumber;
                $daytotal= $$testing;
            for($i = 1; $i < count($bookingTimes)+1; $i++) 
            {
                $sql="INSERT INTO booked (date, time, deskid, member_id) VALUES ('$daytotal', '$i', '$deskid', '$member_id')";
                    $result = mysql_query($sql);
                    if (!$result) {
                        die('Invalid query: ' . mysql_error());
                    }
            }
            }
        }
        break;
}
}
4

2 に答える 2

1

いずれにせよSQLブロック全体に使用すると、維持するのが難しくなります。 より効率的にします。

function bookweek($week) {
global $deskid, $date, $time, $member_id, $bookingTimes, $day0, $day1, $day2, $day3, $day4, $day5, $day6, $day7, $day8, $day9, $day10, $day11, $day12, $day13;

$queryP = "SELECT * FROM booked where deskid='".$deskid."' AND date>";
dbconnect();
switch($week) {
case 1: 
       $dupecheck = mysql_query($queryP."='".$day0."' AND date <'".$day7."'");      
       break;
case 2:
       $dupecheck = mysql_query($queryP."'".$day6."'");         
       break;
}
    if (mysql_num_rows($dupecheck) == 0) 
[...]     

そしてmysqliを試してみてください

コードがより明確になり、改善できることがすぐに明らかになりました。

$queryP = "SELECT * FROM booked where deskid='".$deskid."' AND date>";
dbconnect();

switch($week) {
case 1: 
       $queryP .= "='".$day0."' AND date <'".$day7."'";
       break;
case 2:
       $queryP .= "'".$day6."'";
       break;
}
       $dupecheck = mysql_query($queryP);          
       if (mysql_num_rows($dupecheck) == 0) 
[...]

ループに行きましょう。
エラーのテストを改善するため。内側のループだけを変更します。

if (mysql_num_rows($dupecheck) == 0) 
  {
         for($j = 0; $j< 7; $j++) 
         {  
          $testing = "day".$j;
          $daytotal= $$testing;
          $sql = "INSERT INTO booked (date, time, deskid, member_id) VALUES ";
          $sqlTest = $sql;
          for($i = 1; $i < count($bookingTimes)+1; $i++) 
            {
              $sql .= "('".$daytotal."', '".$i."', '".$deskid."', '".$member_id."'),";
            }
          if ($sql == $sqlTest) {
                // nothing to be done or die
            } else {
            $sql = rtrim($sql,",");    
            result = mysql_query($sql);
              if (!$result) {
                 die('Invalid query: ' . mysql_error());
              }
           }
         }
 }
于 2012-10-27T15:29:11.313 に答える
0

準備済みステートメントを使用すると、MySQL リソースを大幅に節約できると思います。

于 2012-10-27T19:43:32.713 に答える