Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用循环在PHP中获取SQL记录的下一个特定值_Php_Sql_Oop_Sorting_Loops - Fatal编程技术网

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

使用循环在PHP中获取SQL记录的下一个特定值,php,sql,oop,sorting,loops,Php,Sql,Oop,Sorting,Loops,对不起,如果我的英语不好。我有一张这样的桌子: 我想做的是让一个函数自动从嵌入到“$sort”变量的4个值中获取6个值,然后将其放在“$bawah”变量中,所以我这样编码: $this->nomer = $sort; $bawah = $this->nomer + 1; $cek = $this->db->query("SELECT * FROM artikel_kategori WHERE sort='$bawah' LIMIT 1"); wh

对不起,如果我的英语不好。我有一张这样的桌子:

我想做的是让一个函数自动从嵌入到“$sort”变量的4个值中获取6个值,然后将其放在“$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");

如果执行一个返回所有6个数字的查询,可能会更有效 从artikel_kategori中选择*

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


使用php循环处理6个结果要比执行6个sql查询快得多

如果我正确理解您要实现的目标,这可能会完成以下任务:

$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的反馈修复代码。请参阅注释。

您要处理多少个表?只有一条?什么条件允许您选择第五行值“6”?该条件是下一条值高于“$sort”值的记录。例如,$sort变量有4个值,那么值大于4的变量是6,因此我需要将6值返回给$bawah变量。这是我的实际表,它确实工作,但它继续返回高于它的值,而不是6值。实际上,排序字段的排序方式与我上面解释的不同,但即使我在查询中添加了“排序方式”,结果仍然是一样的。这是我的实际表格:您能以$sort的输入值和$bawah的相应输出值的形式给出一些示例吗。另外,您确定您处理的是列排序而不是IDKategori,因为您提到的值来自后者吗?例如,$sort变量有4个值,那么4之后的下一个较大值是6。因此,我需要得到$bawah变量的6值。是的,我只想处理“sort”列,而不是IDKategori列,因为它仅用于排序编辑目的,而不更改其他列的值。这是我的表格,按顺序排列,以便阅读:@IkouKuhn:我更新了我的答案。请尝试一下,如果它没有按预期工作,报告意外的结果,即->。它仍然是一样的,我的预期是如果$sort->4然后$bawah->6,但是从上面的代码来看,结果是这样的:$sort->4但是$bawah->2,适用于其他值,它会不断返回相同的结果$bawah->2。