2010-04-28 60 views
0

如何從數據庫表中獲取下一行?這樣行可能會增加行,即如果結構有一個名爲「id」的字段,那麼該行可以是id ++或下一個增加的行,但也可以是任何其他包含行的id(NOT VERY NEXT),(因爲ID可以從表中刪除)。如何從數據庫表中獲取下一行?

我使用MySQL數據庫下面 是我的代碼..

mysql_select_db('pranav_test'); 
$seletaudit = mysql_query("SELECT * FROM jos_audittrail WHERE live = 0"); 
while($row2 = mysql_fetch_array($seletaudit)) 
{ 
    $audit[] =$row2; 
} 
$trackid = array(); 
$tracktable = array(); 
$i = 0; 
foreach($audit as $val) 
{ 
    $trackid[$i] = $val['trackid']; 
    $tracktable[$i] = $val['table_name']; 

    if($i!=0) 
    { 
     $prev_id = $trackid[$i-1]; 
     $prev_valtab = $tracktable[$i-1]; 
    } 
    if($val['operation'] == 'INSERT') 
    { 
     if($tracktable[$i]!=$prev_valtab) 
     { 
      $inserttable = "INSERT INTO '".$tracktable[$i]."' ("; 
     } 


     if($tracktable[$i]==$prev_valtab) 
     { 
      $insertfield .= "'".$val['field']."', "; 
     } 
     if($tracktable[$i]==$prev_valtab) 
     { 
      $insertfield .= "]"; 
      $insertfield = str_replace(", ]",")",$insertfield); 

     } 
    } 
} 

上文我需要知道什麼將是我的下一個行的「表格名」字段包含... 我怎樣才能做到這一點....? 請幫助獲取for循環中的下一行以檢查它。

+0

你能提供一些代碼嗎?你正在使用哪個數據庫?你使用哪些功能/對象來連接它?等 – 2010-04-28 11:21:02

回答

1

UPDATE

好了,現在你貼一些代碼,這裏更具體的答案:

如果你想進入到下一行數組中,我建議使用正常for循環來訪問索引:

for($i = 0; $i<count($audit); $i++) { 
    // $audit[$i] is current row 
    // $audit[$i+1] is next row 
} 

但是當你到達數組的末尾要小心,因爲$i+1將出界。

或者,如果你只是想知道爲什麼在當前的代碼$i無法正常運作: 你必須在你的foreach循環的末尾增加它:

$i++; 

UPDATE2
更完整的例子說清楚(我適應你的方法,並檢查以前的行)

for($i=0; $i<count($audit);$i++) 
{ 
    $curr = $audit[$i]; 

    if($i>0) { 
     $prev = $audit[$i-1]; 

     if($curr['operation'] == 'INSERT') 
     { 
      if($curr['table_name']!=$prev['table_name']) 
      { 
       $inserttable = "INSERT INTO '".$curr['table_name]."' ("; 
      } 
      else { 
       // whereever $insertfield comes from 
       $insertfield .= "'".$curr['field']."', "; 
       $insertfield .= "]"; 
       $insertfield = str_replace(", ]",")",$insertfield); 

      } 
     } 
    } 
} 

由於您沒有在所有指定如何連接到數據庫,這裏是一個通用的答案:

指定您的查詢命令的結果通過ID設置:

$query = "SELECT <columns here> FROM <table here> ORDER BY id"; 

然後得到的結果集(我們有一個虛構的數據庫類):

$result = $db->query($query); 

然後在結果集迭代:

while($row = $result->next()) { 
    // do something with row 
} 
+0

請chk更新問題..你說什麼呢? – 2010-04-28 11:33:14

+0

@Parth:我的回答仍然有效(第一部分;))但是我更新了它... – 2010-04-28 11:34:14

+0

沒有菲利克斯U仍然沒有讓我正確,或者我再也沒有指出,不管它可能是什麼,在這裏我想要說,在上面提到的循環中,我只需要下一行的列的值,對於每個迭代... – 2010-04-28 11:37:38

相關問題