通过循环在PHP中获取SQL记录的下一个特定值


Getting a next specific value of SQL record in PHP with looping

对不起,如果我的英语不好。我有一张这样的桌子:https://i.stack.imgur.com/TuV0s.jpg

我想做的是有一个函数,自动获得6值基于4值嵌入'$sort'变量,然后把它放在'$bawah'变量,所以我这样编码:

$this->nomer = $sort;
    $bawah = $this->nomer + 1;
    $cek = $this->db->query("SELECT * FROM artikel_kategori WHERE sort='$bawah' LIMIT 1");
    while ($cek->num_rows() == 0) {
        $bawah = $this->bawah + 1;
    }

但它似乎不起作用,请帮帮我,我还是一个业余程序员。仅供参考,我使用CodeIgniter作为框架。我想要实现的是将表的记录与'$sort'值与'$bawah'值交换,以便第四行排序位置可以与第五行交换。下面是我对交换记录的查询:

$this->db->query("UPDATE artikel_kategori AS kat1 JOIN artikel_kategori AS kat2 
        ON 
            (kat1.sort='$sort' AND kat2.sort='$bawah') 
        SET 
            kat1.sort=kat2.sort, kat2.sort=kat1.sort");

如果我正确理解你想要实现的目标,这可能会完成工作:

$this->nomer = $sort;
$bawah = '';
$cek = $this->db->query("SELECT sort FROM artikel_kategori ORDER BY sort ASC");
$resArr = $cek->result_array();
for ($i = 0; $i < count($resArr) - 1; $i++) {
/* for ($i = 1; $i < count($resArr); $i++) { // <-- For getting previous entry */
    $row = $resArr[$i];
    if ($row["sort"] == $sort) {
        $row2 = $resArr[$i + 1];
        /* $row2 = $resArr[$i - 1]; // <-- For getting previous entry */
        $bawah = $row2["sort"];
        break;
    }
}
if (empty($bawah)) {
    /* $sort is either the greatest/lowest value 
       or not at all present in the table */
}

编辑:根据OP的反馈修正代码(见注释)

它可能会更有效地做1查询返回你所有6个数字SELECT * FROM artikel_ategori

使用for循环遍历所有结果并检查结果是否为正确的1。

使用php遍历6个结果比使用6个sql查询要快得多