[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Сортировка записей
Страницы: 1, 2
Valick
Цитата (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
hurt3
Valick

вот эта проверка к чему

IF((sort >= $to AND sort < $from),sort + 1,IF(sort = $from,$to,sort))

ведь условие и так соблюдается WHERE sort >= $to AND sort <= $from

?
Valick
hurt3, ну так попробуйте без неё
а ещё лучше внимательно посмотрите на условия, найдите разницу, подумайте почему так, почитайте как работает IF в SQL
без WHERE sort >= $to AND sort <= $from запрос отработает, более того он отработает правильно, но перелопатит всю таблицу, и если там будет пару миллионов записей, а переместить надо будет всего на одну позицию, то мягко говоря "Сизиф отдыхает"..

_____________
Стимулятор ~yoomoney - 41001303250491
hurt3
аа ясно изменяете порядок для перемещаемого элемента, понял спасибо, да и правда удобнее
Valick
hurt3, вообще-то все ждут от вас запрос, на перемещение сверху вниз (может и не все, но я точно жду)


_____________
Стимулятор ~yoomoney - 41001303250491
hurt3
да это ерунда условия выборки поменять и sort -- выставить , усложним задачу.
Попробуем организовать массовое перемещение строк, в новой теме.
Valick
Цитата (hurt3 @ 7.01.2015 - 12:03)
да это ерунда

много текста... лучше показать один коротенький запрос

массовое перемещение, это вообще сказка

_____________
Стимулятор ~yoomoney - 41001303250491
hurt3
$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 ";
mvg
Если БД нормализирована и все таблицы приведены к нормальным формам то порядок хранения записей в БД безразличен.

Например в таблице

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

то такую БД надо нормализировать/нормализовать.

Ситуация когда юзер поменял сортировку должна касаться только одного юзера и не должна касаться всех юзеров соответственно юзер меняет сортировку где-то в куках, а БД остается не тронутой.

Что-то в логике где-то у вас не так.
hurt3
mvg

в куккисах предлогаете сортировку хранить7) а если записей 50 0000 000

здесь скорее подойдет решение вроде рандомизатор

мне кажется вы не прониклись вопросом

пользователь может создавать свои записи и задавать для них сортировку другие участники могут просмотреть его записи с той сортировкой которую он задал
hurt3
я задумывался о таком решнии как создание формулы сортировки было бы очень удобно но как долго будет происходить расчет unsure.gif
hurt3
видел ожнажды решение подобное -рандомизатор на основе формулы с синусом
если не ошибаюсь использовался номер порядковый юзера и дальше формула меняла выдачу в определенном порядке для каждого юзера индивидуально
если бы его еще можно было прменить в обратном направлении т.е. юзер меняет выдачу и в результате получает порядковый номер комбинации было бы чудесно
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.