【问题标题】:Priority Row Increase or Decrease based on Selection根据选择增加或减少优先级行
【发布时间】:2013-05-05 18:21:27
【问题描述】:

我找了又找,但找不到我要的东西,这可能是超级简单的。

我有一个表格,其中有一个要按选择顺序显示的优先级字段。我希望能够做什么我已经看到但不知道如何让我的代码做到这一点。

获取优先级为 1、2、3、4、5、6 的数据,并将 #5 更改为 4,并相应地调整所有其他数字。 所以现在它将是 1,2,3,4(旧 5),5(旧 4),6。

我正在使用 PHP、Mysql,但由于某种原因我没有得到这个概念。我可以增加/减少数字,但我不能调整它周围的其他数字。所以我最终得到 1,2,3,4,4,6

表结构 ID、猫、标题、优先级 我只想增加/减少猫。我正在考虑一次排序多个,所以它可能是 1(旧 5)、2(旧 3)、3(旧 6)...等

感谢您的帮助。

编辑

也许我的第一个解释解释得不够好。 假设我有 10 张图片,每张图片都有一个唯一的 ID,并且它们现在的优先级与 ID 相同。我可以显示图像 ORDER BY priority ID 1,2,3,4,5,6,7,8,,9,10 优先级 1,2,3,4,5,6,7,8,9,10

但在查看图片后,我想更改它们显示的优先级。 所以...我单击一个箭头,该箭头具有一个链接,该链接告诉数据库将优先级为 4 的图片 ID 4 更新为 ID 4 优先级 2,因为它更重要。

现在我的数据库看起来像这样。 ID 1,2,3,4,5,6,7,8,9,10 优先级 1、2、2、3、5、6、7、8、9、10,因为其余的优先级数字没有改变,因为我不知道如何使它工作。

我想要做的是,在我将一个优先级更改为新的优先级后,重新排列数字,以便它们在该数字之后按数字顺序排列,因为它们不太重要。我该怎么做?

【问题讨论】:

  • 那你的代码在哪里? (您已经尝试过)
  • $result = mysqli_query($conn,"UPDATE photo_ptitle SET priority = '$newpriority' WHERE id = '$id'") 或死(mysqli_error($conn));这只会更新现有的 id,而不是其他的 .. 这是我绊倒和失败的地方,无法弄清楚。
  • 跳过查询的 WHERE 部分?
  • 如果我跳过 where 然后它会以新的优先级更新数据库中的所有记录。我想用新的优先级更新单个记录,然后更新更新记录两侧的其他记录。
  • 您要更新哪些记录?与 $newpriority 不具有相同价值的那些?

标签: php mysql addition


【解决方案1】:

我希望以下代码可以帮助您解决问题/挑战。:

<?php
//Say that you've recieved array from db...
$arr = array(); 
$arr[0] = array('id'=>5, 'sortOrder' => 1, 'picture' => 'picture1');
$arr[1] = array('id'=>6, 'sortOrder' => 2, 'picture' => 'picture2');
$arr[2] = array('id'=>7, 'sortOrder' => 3, 'picture' => 'picture3');
$arr[3] = array('id'=>9, 'sortOrder' => 4, 'picture' => 'picture4');
$arr[4] = array('id'=>10, 'sortOrder' => 5, 'picture' => 'picture5');


//Do some sorting...

$executeSQL = down($arr,2); //Tell sortOrder to decrease for picture3 and to increase for picture2 
//Array will change to:
//$arr[1] = array('id'>=6, 'sortOrder' => 3, 'picture' => 'picture2');
//$arr[2] = array('id'>=7, 'sortOrder' => 2, 'picture' => 'picture3');

//$executeSQL returns an array of two sql-statements that you should execute


$executeSQL = up($arr, 1); //Decrease sortorder for picture2 and increase for picture3
//Array will change to:
//$arr[1] = array('id'=>6, 'sortOrder' => 2, 'picture' => 'picture2');
//$arr[2] = array('id'=>7, 'sortOrder' => 3, 'picture' => 'picture3');

//$executeSQL returns an array of two sql-statements that you should execute


echo print_r($arr,true); //Will output the original array

function down(Array &$arr, $index) {
 $origPrev = $arr[$index-1]['sortOrder'];      
 $arr[$index-1]['sortOrder'] = $arr[$index]['sortOrder'];  
 $arr[$index]['sortOrder'] = $origPrev;
 $sql = "UPDATE table SET sortOrder=" . $origPrev . " WHERE id=" . $arr[$index]['id'];
 $sql2 = "UPDATE table SET sortOrder=" . $arr[$index]['sortOrder'] . " WHERE id=" . $arr[$index-1]['id']; 
 return array($sql, $sql2);
}

function up(Array &$arr, $index) {
 $origPrev = $arr[$index+1]['sortOrder'];      
 $arr[$index+1]['sortOrder'] = $arr[$index]['sortOrder']; 
 $arr[$index]['sortOrder'] = $origPrev;
 $sql = "UPDATE table SET sortOrder=" . $origPrev . " WHERE id=" . $arr[$index]['id'];
 $sql2 = "UPDATE table SET sortOrder=" . $arr[$index]['sortOrder'] . " WHERE id=" . $arr[$index+1]['id']; 
 return array($sql, $sql2);
}

?>

【讨论】:

  • 谢谢。我有同样的问题,这个想法解决了我的问题。
  • 这是非常有帮助的答案。非常感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-01
  • 1970-01-01
  • 2012-08-08
  • 1970-01-01
  • 2012-08-20
  • 2017-08-15
相关资源
最近更新 更多