使用循环在PHP中获取SQL记录的下一个特定值
对不起,如果我的英语不好。我有一张这样的桌子: 我想做的是让一个函数自动从嵌入到“$sort”变量的4个值中获取6个值,然后将其放在“$bawah”变量中,所以我这样编码:使用循环在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
$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。