Как получить следующую строку из таблицы базы данных? - PullRequest
0 голосов
/ 28 апреля 2010

Как получить следующую строку из таблицы базы данных? Таким образом, строка может быть увеличенной строкой, то есть если структура имеет поле с именем «id», тогда строка может быть id ++ или следующей следующей увеличенной строкой, но она также может быть b любым другим идентификатором, содержащим строку (NOT VERY NEXT) (потому что идентификаторы могут быть удалены из таблицы).

Я использую базу данных 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, чтобы проверить это.

1 Ответ

1 голос
/ 28 апреля 2010

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);

            }
        }
    }
}

Поскольку вы вообще не указали, как вы подключаетесь к базе данных, вот общий ответ:

Укажите свой запрос, чтобы упорядочить набор результатов по идентификатору:

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

Затем получите набор результатов (у нас есть фиктивный класс базы данных):

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

Затем переберите набор результатов:

while($row = $result->next()) {
    // do something with row
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...