2013-05-05 94 views
1

我已经搜索和搜索,但无法找到我后,它可能是超级简单。基于选择的优先级增加或减少

我有一个表,它有一个优先级字段以显示顺序被选中。我希望能够做到的,我已经看到,但不知道如何让我的代码做到这一点。

以优先级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优先 ID 1,2,3,4,5,6,7,8,9,10 优先级1,2,3,4,5,6,7,8,9, 10

但看了图片后,我想改变它们显示的优先级。 SO ...我点击一个箭头,它有一个链接,告诉数据库更新优先级为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,因为其余的优先级数字没有因为我不知道如何完成这项工作,所以不会改变。

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

+0

哪里是你的代码呢? (你已经尝试过) – bestprogrammerintheworld 2013-05-05 18:26:36

+0

$ result = mysqli_query($ conn,“UPDATE photo_ptitle SET priority ='$ newpriority'WHERE id ='$ id'”)或die(mysqli_error($ conn)); 这只会更新现有的身份证,而不会更新其他身份证。这是我绊倒和失败的地方,无法弄清楚。 – clarnp49 2013-05-05 18:37:01

+0

跳过查询的WHERE部分? – bestprogrammerintheworld 2013-05-05 18:51:00

回答

2

我希望这下面的代码可以给你帮助SOM如何解决你的问题/挑战:

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

?> 
+0

谢谢。我有同样的问题,这个想法解决了我的问题。 – Arfeen 2016-09-30 06:00:40

+1

这是非常有帮助的答案。非常感谢 – 2016-09-30 06:00:51