Цитата (hurt3 @ 5.01.2015 - 19:11) |
$this->sql = 'UPDATE `topikgroup_part` SET `sort` = `sort`+1 WHERE `sort` >= '.$fine. ' AND `sort` < '.$start.' '; |
Вообще-то вы на верном пути, не обязательно использовать функции для такой простой задачи.
Вот так можно переместить с низу вверх всего одним запросом:
$from = 4;
$to = 2;
$this->sql = "UPDATE `topikgroup_part` SET `sort` = IF((sort >= $to AND sort < $from),sort + 1,IF(sort = $from,$to,sort)) WHERE sort >= $to AND sort <= $from";
попробуйте теперь сами написать запрос для перемещения с верху вниз
_____________
Стимулятор ~yoomoney - 41001303250491
Valick
вот эта проверка к чему
IF((sort >= $to AND sort < $from),sort + 1,IF(sort = $from,$to,sort))
ведь условие и так соблюдается WHERE sort >= $to AND sort <= $from
?
hurt3, ну так попробуйте без неё
а ещё лучше внимательно посмотрите на условия, найдите разницу, подумайте почему так, почитайте как работает IF в SQL
без WHERE sort >= $to AND sort <= $from запрос отработает, более того он отработает правильно, но перелопатит всю таблицу, и если там будет пару миллионов записей, а переместить надо будет всего на одну позицию, то мягко говоря "Сизиф отдыхает"..
_____________
Стимулятор ~yoomoney - 41001303250491
аа ясно изменяете порядок для перемещаемого элемента, понял спасибо, да и правда удобнее
hurt3, вообще-то все ждут от вас запрос, на перемещение сверху вниз (может и не все, но я точно жду)
_____________
Стимулятор ~yoomoney - 41001303250491
да это ерунда условия выборки поменять и sort -- выставить , усложним задачу.
Попробуем организовать массовое перемещение строк, в новой теме.
Цитата (hurt3 @ 7.01.2015 - 12:03) |
да это ерунда |
много текста... лучше показать один коротенький запрос
массовое перемещение, это вообще сказка
_____________
Стимулятор ~yoomoney - 41001303250491
$from = 4;
$to = 2;
$action ='++';
$condition = 'sort >= $to AND sort <= $from'
if($from<$to){
$action ='--';
$condition = 'sort <= $to AND sort >= $from'
}
$this->sql = "UPDATE `topikgroup_part` SET `sort` = IF(($condition ),sort $action ,IF(sort = $from,$to,sort)) WHERE $condition ";
Если БД нормализирована и все таблицы приведены к нормальным формам то порядок хранения записей в БД безразличен.
Например в таблице
id_content | id_razdel | sort
записи будут храниться так
id_content | id_razdel | sort
1 | 1 | 1
2 | 1 | 1
3 | 1 | 1
3 | 1 | 1
1 | 1 | 3
1 | 1 | 2
5 | 1 | 1
6 | 1 | 1
9 | 1 | 1
тогда запросом
SELECT * FROM X ORDER BY sort ASC
выдаст сортированный массив
Если же БД выглядит
id_content | id_razdel | sort
1 | 1 | 1,2,3
2 | 1 | 1,2,4
3 | 1 | 2,8,10,1
то такую БД надо нормализировать/нормализовать.
Ситуация когда юзер поменял сортировку должна касаться только одного юзера и не должна касаться всех юзеров соответственно юзер меняет сортировку где-то в куках, а БД остается не тронутой.
Что-то в логике где-то у вас не так.
mvg
в куккисах предлогаете сортировку хранить7) а если записей 50 0000 000
здесь скорее подойдет решение вроде рандомизатор
мне кажется вы не прониклись вопросом
пользователь может создавать свои записи и задавать для них сортировку другие участники могут просмотреть его записи с той сортировкой которую он задал
я задумывался о таком решнии как создание формулы сортировки было бы очень удобно но как долго будет происходить расчет
видел ожнажды решение подобное -рандомизатор на основе формулы с синусом
если не ошибаюсь использовался номер порядковый юзера и дальше формула меняла выдачу в определенном порядке для каждого юзера индивидуально
если бы его еще можно было прменить в обратном направлении т.е. юзер меняет выдачу и в результате получает порядковый номер комбинации было бы чудесно
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.