|
|
|
| $pos=mysql_result(mysql_query("select position from flats where id = '{$_GET['id']}'"),0);
mysql_query("update flats set position=position-1 where position='$pos'");
mysql_query("update flats set position=position+1 where position>='$pos+1'");
я вот запуталсо)
должно передвинуть на позицию вверх.... | |
|
|
|
|
|
|
|
для: sl1p
(23.08.2008 в 00:36)
| | сори не в адеквате писал вчера)) не объяснил норм..
тоесть я знаю позицию и чтобы подвинуть вверх мне нужно поменять местами, позицию которую я знаю и эту же позицию+1
но в запросе выше оно само себя дёргает.. тоесть отняло себе номер и себе же добавило.
как тут можно?.. | |
|
|
|
|
|
|
|
для: sl1p
(23.08.2008 в 00:36)
| | Не понятно, что хотите добиться? | |
|
|
|
|
|
|
|
для: cheops
(24.08.2008 в 01:07)
| | эм.. с помощбю Трианона уже добился.. не понял зачем удалены все посты с решением) | |
|
|
|
|
|
|
|
для: sl1p
(24.08.2008 в 03:18)
| | ещё вот возникли вопросы:
теперь позицию нужно не передвинуть а вставить существующую позицию на новую.
тоесть допустим есть позиции 1,2,3,4,5;
нужно 5 позицию поставить на место 2 при этом не поменять их местами, а именно вставить между между 2 и 3, не увеличивая количество максимальной позиции.. тоесть чтобы от 1-5 так и осталось.
и ещё:
сколько этот запрос не использую, никак не могу понять как он работаетО_о..
update flats set position=position+1 where position>='{$_POST['position']}-1'
(добавляет между существующими новую позицию..
я представляю это так:
есть позиции 1,2,3,4,5;
суём туда например новый объект с позицией 3.
и что получается, 3-1=2, и все позиции больше равно 2 нужно увеличить на +1..
выходит результат 1,3,3(новый объект),4,5,6
тоесть считает всё правильно, получается 123456,но как так? | |
|
|
|
|
|
|
|
для: sl1p
(26.08.2008 в 02:17)
| | жёсткими напрягами мозга)) решил так:
<?
$realpos=mysql_result(mysql_query("select position from flats where id = '{$_GET['id']}'"),0);
if($_POST['position']!=$realpos){
if($_POST['position']>$realpos){
mysql_query("update flats set position=position-1 where position>'$realpos' and position<='{$_POST['position']}'");
}
else{
mysql_query("update flats set position=position+1 where position<'$realpos' and position>='{$_POST['position']}'");
}
}
?>
|
есть чтото по оптимальнее? | |
|
|
|
|
|
|
|
для: sl1p
(27.08.2008 в 04:50)
| | Вам же советовали поискать по словам "поменять местами". Там есть более оптимальные решения.
P.S. А $_GET['id'] и $_POST['position'] у Вас, конечно, имеют тип integer? | |
|
|
|
|
|
|
|
для: BinLaden
(27.08.2008 в 13:39)
| | >Там есть более оптимальные решения.
Для вставки в непрерывный ряд? Может я чего не понял, но по-моему особо лучше там не сделаешь. | |
|
|
|
|
|
|
|
для: Trianon
(27.08.2008 в 14:36)
| | Имею ввиду, что:
0) происходит затрагивание всех рядов, которые находятся между нужной и текущией позициями. А там - просто обмен значений позиций двух записей;
1) необходимо ответвление if($_POST['position']>$realpos) ..., а там - это не имеет значение. | |
|
|
|
|
|
|
|
для: BinLaden
(27.08.2008 в 16:02)
| |
create table users(
id int(11) not null auto_increment default null,
pos int (11),
name varchar(100),
primary key (id)
);
------------
1 1 Ваня
2 2 Петя
3 3 Вася
4 4 Вова
|
Допустим, добавили 5 null Колю.
Как его поставить перед Петей (т.е. с pos = 2 ), отодвинув остальных вниз?
по-моему без
UPDATE users SET pos = pos + 1 WHERE pos >= 2
UPDATE users SET pos = 2 WHERE id = 5
|
не обойтись. | |
|
|
|
|
|
|
|
для: Trianon
(27.08.2008 в 16:14)
| | Безусловно. | |
|
|
|
|
|
|
|
для: Trianon
(27.08.2008 в 16:14)
| | дык у меня уже после апдейта просто идёт апдейт этой позиции вместе с остальными перлами.. если я правильно понял выше написанное)
и это ж вроде не относится к вопросу) тут речь то идёт о добавлении нового) | |
|
|
|
|
|
|
|
для: BinLaden
(27.08.2008 в 13:39)
| | зачем мне местами) | |
|
|
|
|
|
|
|
для: sl1p
(27.08.2008 в 15:56)
| | Ааа...Извиняюсь, у меня оба Ваши вопроса смешались. :)) | |
|
|
|