2011-10-29 4 views
1

우리는 월 1 회 인보이스를 생성하는 스크립트 (cron)를 가지고 있습니다. 그러나 "from - to"날짜 범위를 선택한 다음 선택한 날짜에 대해서만 인보이스를 생성 할 수있는 기능을 추가하려고합니다.날짜로 MYSQL 결과 필터링

캘린더 팝업으로 입력 필드를 만드는 것이 어렵지는 않지만 PHP로 필터링하는 것은 좀 더 큰 과제입니다. 누군가 내 코드를보고 몇 가지 팁을주고 싶다면 감사 할 것입니다. .

function genInvoice($clientID, $orderID=0, $paid=false) 
{ 
    if($orderID == 0) 
     $sql = "select tblorders.* from tblorders,tblusers where invoiceid=0 and tblorders.userid=tblusers.id " . 
      "and status='closed' and tblusers.clientid=" . $clientID; 
    else 
     $sql = "select tblorders.* from tblorders,tblusers where invoiceid=0 and tblorders.userid=tblusers.id " . 
      "and tblusers.clientid=" . $clientID . " and tblorders.id=" . $orderID; 
    $res = full_query($sql) or die(mysql_error()); 
    // If no closed orders uninvoiced, just return 
    if(!mysql_num_rows($res)) 
     return 0; 

    $amount = 0; 
    $orders = array(); 
    while($row = mysql_fetch_array($res, MYSQL_ASSOC)) 
    { 
//  print_r($row); 
//  print "<br><hr>"; 
     $amount += $row['amount']; 
     $orders[] = $row['id']; 
    } 
    $date = date("Y-m-d"); 
    $status = $paid ?'Paid' : 'Unpaid'; 
    $sql = "insert into tblinvoices (clientid, date, duedate, subtotal, total, status) values (" . $clientID . ",'" . $date . 
     "','" . $date . "'," . $amount . "," . $amount . ",'" . $status . "')"; 
    $res = full_query($sql) or die(mysql_error()); 
    $invoiceid = mysql_insert_id(); 
    $sql = "update tblorders set invoiceid=" . $invoiceid . " where id in (" . implode(",", $orders) . ")"; 
    $res = full_query($sql) or die(mysql_error()); 
    $sql = "select tblorders.id as ReportID, FirstName, LastName, SearchName, CountyID, StateID, bl_orderitems.userid, bl_orderitems.amount, " . 
     "bl_orderitems.notes from tblorders, bl_orderitems left join bl_search on bl_search.id=packageid where tblorders.id in (" . 
     implode(",", $orders) . ") and bl_orderitems.orderid=tblorders.id order by tblorders.id,bl_orderitems.id"; 
    $res = full_query($sql) or die(mysql_error()); 
    while($row = mysql_fetch_array($res, MYSQL_ASSOC)) 
    { 
     if($row['CountyID'] != 0) 
      $locale = getCounty($row['CountyID']); 
     else if($row['StateID'] != 0) 
      $locale = getState($row['StateID']); 
     if($row['SearchName'] != "") 
      $description = mysql_real_escape_string($row['FirstName'] . " " . $row['LastName'] . " " . 
       $row['SearchName'] . " " . $locale . " (Order #" . $row['ReportID'] . ")"); 
     else 
      $description = "Search Package: " . mysql_real_escape_string($row['notes'] . " (Order #" . $row['ReportID'] . ")"); 
     $sql = "insert into tblinvoiceitems (invoiceid, userid, type, description, amount, duedate) values " . 
      "(" . $invoiceid . "," . $row['userid'] . ",'search','" . $description . "','" . 
      $row['amount'] . "','" . $date . "')"; 
//  print $sql . "<br>"; 
     full_query($sql) or die(mysql_error()); 
    } 
    sendmessage ('Invoice Created', $invoiceid); 
    return $invoiceid; 
} 

답변

4

해당 코드를 모두 살펴 보지는 않지만 날짜 범위별로 결과를 필터링하는 것은 쉽습니다.

SELECT id FROM some_table WHERE some_date_field BETWEEN $first_date AND $second_date