2011-07-11 11 views
1

私はFFDBデータベース(フラットファイルデータベース)を使用しています。最新の有効期限を持つ単一レコードを表示

このスクリプトは、$ vincフィールドの値が同じであれば動作しますが、$ vinc値がR1、R2、R3、R4、R5の5種類あります。代わりに空白のページが表示されます。

<?php 

    function getbyfunction($selectfn, $orderby = NULL, $includeindex = false) 
    { 
     if (!$this->isopen) 
     { 
      user_error("Database not open.", E_USER_ERROR); 
      return false; 
     } 

     // If there are no records, return 
     if ($this->records == 0) 
      return array(); 

     if (!$this->lock_read()) 
      return false; 

     // Read the index 
     $index = $this->read_index(); 

     // Read each record and add it to an array 
     $rcount = 0; 
     foreach($index as $offset) 
     { 
      // Read the record 
      list($record, $rsize) = $this->read_record($this->data_fp, $offset); 

      // Add it to the result if the $selectfn OK's it 
      if ($selectfn($record) == true) 
      { 
       // Add the index field if required 
       if ($includeindex) 
       $record[FFDB_IFIELD] = $rcount; 

       $result[] = $record; 
      } 

      ++$rcount; 
     } 

     $this->unlock(); 

     // Re-order as required 
     if ($orderby !== NULL) 
      return $this->order_by($result, $orderby); 
     else 
      return $result; 
    } 


    function returnRec($item){ 
      if($item) 
      return true; 
    } 

    $db = new FFDB(); 
    if (!$db->open("foo")) 
    { 
    $schema = array(
     array("key", FFDB_INT, "key"), 
     array("status", FFDB_STRING), 
     array("vinc", FFDB_STRING), 
     array("month", FFDB_STRING), 
     array("day", FFDB_INT), 
     array("year", FFDB_INT) 
    ); 
     // Try and create it... 
    if (!$db->create("foo", $schema)) 
    { 
     echo "Error creating database\n"; 
     return; 
    } 
    } 

    $result = $db->getbyfunction("returnRec", "vinc"); 
     show_rec(end($result)); 

    function show_rec($record){ 
    $number = $record["key"]; 
    $Rvinc = $record["vinc"]; 
    $Rstatus = $record["status"]; 
    $Rday = $record["day"]; 
    $Rmonth = $record["month"]; 
    $Ryear = $record["year"]; 

    $tday = getdate(); 
    $current_year = $tday['year']; 
    $current_month = $tday['month']; 

    if (($status == ON) && ($vinc == R1) && ($month >= $current_month) && ($year ==     current_year)){ 

    echo "myrecord $vinc $status $day $month $year"; 

    } 
    ?> 

おかげ


Yegge、show_recを使用して($結果[0])。それは1つのレコードを示すが、代わりに最新の有効期限は、最新の有効期限を示している。

はすなわち: 1つのレコードは2011年8月1日 2レコードは2011年11月1日

show_rec($結果を期限切れを期限切れ[0]);代わりに、2011年8月1日


Yegge

show_rec(エンド($結果))の有効期限は2011年11月1日でレコードを示しています。 $ vinc == R1だけで動作し、別のレコードを追加した場合は、vincはR1でなく、空白のページを表示します。

+0

まあ、どのようなデータベースを使用していますか? – Charx

答えて

0
<?php 

    function getbyfunction($selectfn, $orderby = NULL, $includeindex = false) 
    { 
     if (!$this->isopen) 
     { 
      user_error("Database not open.", E_USER_ERROR); 
      return false; 
     } 

     // If there are no records, return 
     if ($this->records == 0) 
      return array(); 

     if (!$this->lock_read()) 
      return false; 

     // Read the index 
     $index = $this->read_index(); 

     // Read each record and add it to an array 
     $rcount = 0; 
     foreach($index as $offset) 
     { 
      // Read the record 
      list($record, $rsize) = $this->read_record($this->data_fp, $offset); 

      // Add it to the result if the $selectfn OK's it 
      if ($selectfn($record) == true) 
      { 
       // Add the index field if required 
       if ($includeindex) 
       $record[FFDB_IFIELD] = $rcount; 

       $result[] = $record; 
      } 

      ++$rcount; 
     } 

     $this->unlock(); 

     // Re-order as required 
     if ($orderby !== NULL) 
      return $this->order_by($result, $orderby); 
     else 
      return $result; 
    } 


    function returnRec($item){ 
      if($item) 
      return true; 
    } 

    $db = new FFDB(); 
    if (!$db->open("foo")) 
    { 
    $schema = array(
     array("key", FFDB_INT, "key"), 
     array("status", FFDB_STRING), 
     array("vinc", FFDB_STRING), 
     array("month", FFDB_STRING), 
     array("day", FFDB_INT), 
     array("year", FFDB_INT) 
    ); 
     // Try and create it... 
    if (!$db->create("foo", $schema)) 
    { 
     echo "Error creating database\n"; 
     return; 
    } 
    } 

    $result = $db->getbyfunction("returnRec", "vinc"); 
    foreach($result as $item) {show_rec($item);break;} 

    function show_rec($record){ 
    $number = $record["key"]; 
    $Rvinc = $record["vinc"]; 
    $Rstatus = $record["status"]; 
    $Rday = $record["day"]; 
    $Rmonth = $record["month"]; 
    $Ryear = $record["year"]; 

     $tday = getdate(); 
    $current_year = $tday['year']; 
    $current_month = $tday['month']; 

    if (($status == ON) && ($vinc == R1) && ($month >= $current_month) && ($year ==     current_year)){ 

    echo "myrecord $vinc $status $day $month $year"; 

    } 
    ?> 

私は上記のようにループ内でブレークを使用する必要があると思います。

0
select product, expirationdate from your_table 

where expirationdate > {current_date} order by expirationdate ASC limit 1 

{CURRENT_DATE} PHPから渡されるべきか、私が正しくあなたのコードを理解する場合は、代わりに

0

をMySQLの機能を使用することができ、代わりに

foreach($result as $item) {show_rec($item);break;} 
//use 
show_rec($result[0]); //only show the very first item in the result array 

編集の変数です:その後、これを使用します:

show_rec(end($result)); 
0

SOLUTION:

私は解決策を投稿してくださいしたい:私が最初に持っていたものと異なる

$result = $db->getall(lp_month,lp_year); 
$i = 0; 
foreach ($result as $row){ 
    print_r (show_record($row)); 
if ($i >= 1) 
break; 
$i++; 
} 

ない多く、しかしますprint_r代わりのエコーは、トリックをした:

print_r (show_record($row)); 

ありがとう

関連する問題