【问题标题】:How to get the next row from the Database table?如何从数据库表中获取下一行?
【发布时间】:2010-04-28 11:17:40
【问题描述】:

如何从数据库表中获取下一行?这样该行可能是递增的行,即如果结构有一个名为“id”的字段,那么该行可以是 id++ 或下一个递增的行,但它也可以是任何其他包含行 (NOT VERY NEXT) 的 id,(因为ids 可以从表中删除)。

我正在使用 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);

        }
    }
}

在上面我不需要知道我的下一行的“table_name”字段将包含什么... 我怎样才能做到这一点....? 请帮助获取 for 循环中的下一行以对其进行检查。

【问题讨论】:

  • 你能提供一些代码吗?你用的是哪个数据库?您使用哪些功能/对象来连接它?等等

标签: php loops for-loop


【解决方案1】:

更新

好的,既然你发布了一些代码,这里有一个更具体的答案:

如果您想访问数组中的下一行,我建议使用普通的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
一个更完整的例子来说明清楚(我调整你的方法并检查 previous 行)

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
}

【讨论】:

  • @Parth:我的回答仍然有效(第一部分;))但我还是更新了它......
  • No Felix U 仍然没有让我明白,或者我还是没说到点子上,不管它是什么,在这里我想说的是,在上面提到的 for 循环中,我需要一列的值仅用于下一行,每次迭代...
  • 或者干脆忘记整个问题,告诉我如果我在 for 循环中根据任何查询结果,我需要在下一行的条件下在同一个循环的迭代中运行一些代码特定列具有我所需的值....
  • @Parth:如我所说,如果你的当前行是5(即$i = 5)并且你想知道下一行的表名,那么它就是$audit[$i+1]['table_name']跨度>
猜你喜欢
  • 1970-01-01
  • 2020-05-08
  • 1970-01-01
  • 2011-01-27
  • 1970-01-01
  • 2016-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多