1

毎月の契約が存在するかどうか、署名されているかどうかを確認する必要があります。重すぎるように見えるので、コードを改善します

PDO に切り替える時が来ました。スクリプトを高速化するためにいくつか書き直すことができるかもしれません。

基本的に、2 列のテーブルがあります。1 列目は日付参照、2013/1 月、2013/2 月... 2 列目はドキュメントが存在し、署名があるかどうかを表示します。

ここに私のコード。改善する方法はありますか?

// QUERY DB
// Get contract
$contract = array();
$query1 = mysql_query("SELECT * FROM contracts
                       WHERE ic_id='28'");
while ($row = mysql_fetch_assoc($query1)) {
    $contract[] = $row['month'];          
}

$signature = array();
$query1 = mysql_query("SELECT * FROM contracts
                       WHERE ic_id='28'");
while ($row = mysql_fetch_assoc($query1)) {
    $signature[] = $row['sign'];          
}

// Get START AND END DATE

$startYear =  '2012';
$startMonth = '12';

$endYear =  '2013';
$endMonth = '12';

$startDate = strtotime("$startYear/$startMonth/01");
$endDate   = strtotime("$endYear/$endMonth/01");

$currentDate = $endDate;

結果表

<tbody>
    <?php
        while ($currentDate >= $startDate) {
        $foo = date('Y-m',$currentDate);   
        $currentDate = strtotime( date('Y/m/01/',$currentDate).' -1 month');
    ?>       
    <tr class="grade">
        <td>    
           <?php   echo $foo; ?>
        </td>

        <td>
        <?php 

        if (in_array($foo, $contract)) { 
        echo "<img src='images/ok.png';
        } else {
        echo "<img src='images/ko.png'/>";   
        }

        if (in_array($foo, $signature)) { 
        echo "<img src='imagens/ok.png'/>";
        } else {
        echo "<img src='imagens/sign.png'/>";   
        }

        ?>
        </td>
    </tr>

    <?php
    $i++;
    }
    ?>                    
</tbody>
4

2 に答える 2

1

The first thing that comes to mind is this duplicate SQL query...

Existing

$contract = array();
$query1 = mysql_query("SELECT * FROM contracts
                       WHERE ic_id='28'");
while ($row = mysql_fetch_assoc($query1)) {
    $contract[] = $row['month'];          
}

$signature = array();
$query1 = mysql_query("SELECT * FROM contracts
                       WHERE ic_id='28'");
while ($row = mysql_fetch_assoc($query1)) {
    $signature[] = $row['sign'];          
}

Updated

$contract = array();
$signature = array();
$query1 = mysql_query("SELECT month, sign FROM contracts
                       WHERE ic_id='28'");
while ($row = mysql_fetch_assoc($query1)) {
    $contract[] = $row['month'];   
    $signature[] = $row['sign'];       
}

Changes

  • Removed the duplicate SQL queries. There is no need to query & loop over the same information twice.
  • Updates SQL to only request month and sign columns, since that's all your using the extra is wasted memory / processing.
于 2013-05-08T13:16:11.977 に答える