2013-05-05 2 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, Cat, Title, Priority Я хочу только увеличить/уменьшить кошку. Я смотрю на сортировку по одному за раз, так что это может быть 1 (старые 5), 2 (старые 3), 3 (старые 6) ... и т. Д.

Спасибо за помощь.

EDIT

Может быть, мои первые не было объяснения объяснены достаточно хорошо. Предположим, у меня есть 10 фотографий, каждый с уникальным идентификатором, и приоритет, который они задают прямо сейчас, совпадает с идентификатором. Я могу отображать изображения ПРИКАЗЫВАЮТ приоритет ID 1,2,3,4,5,6,7,8,, 9,10 Приоритет 1,2,3,4,5,6,7,8,9, 10

Но, посмотрев фотографии, я хочу изменить приоритет, который они показывают. SO ... Я нажимаю стрелку со ссылкой, которая сообщает базе данных обновлять идентификатор изображения 4 с приоритетом 4, чтобы быть приоритетом ID 4, потому что это более важно.

Теперь моя база данных выглядит так. ID 1,2,3,4,5,6,7,8,9,10 Приоритет 1,2,2,3,5,6,7,8,9,10, поскольку остальные номера приоритетов didn Меня не изменят, потому что я не знаю, как это сделать.

Что я хочу сделать, после того, как я изменил один приоритет на новый, измените номера так, чтобы они были в цифровом порядке после этого числа, потому что они менее важны. Как мне это сделать?

+0

Где ваш код тогда? (с которым вы пытались) – bestprogrammerintheworld

+0

$ result = mysqli_query ($ conn, "UPDATE photo_ptitle SET priority = '$ newpriority' WHERE id = '$ id'") или die (mysqli_error ($ conn)); Это обновляет только существующий идентификатор, а не другие. Здесь я спотыкаюсь и терпеть неудачу и не могу понять. – clarnp49

+0

Пропустить WHERE-часть запроса? – bestprogrammerintheworld

ответ

2

Я надеюсь, что следующий код может дать вам сомы помощи, как решить вашу проблему/задачу .:

<?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

+1

Это был очень полезный ответ. огромное спасибо –