Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Передвинуть позицию

Сообщения:  [1-10]   [11-14] 

 
 автор: sl1p   (27.08.2008 в 16:49)   письмо автору
 
   для: Trianon   (27.08.2008 в 16:14)
 

дык у меня уже после апдейта просто идёт апдейт этой позиции вместе с остальными перлами.. если я правильно понял выше написанное)
и это ж вроде не относится к вопросу) тут речь то идёт о добавлении нового)

  Ответить  
 
 автор: BinLaden   (27.08.2008 в 16:18)   письмо автору
 
   для: Trianon   (27.08.2008 в 16:14)
 

Безусловно.

  Ответить  
 
 автор: Trianon   (27.08.2008 в 16:14)   письмо автору
 
   для: 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

не обойтись.

  Ответить  
 
 автор: BinLaden   (27.08.2008 в 16:07)   письмо автору
 
   для: sl1p   (27.08.2008 в 15:56)
 

Ааа...Извиняюсь, у меня оба Ваши вопроса смешались. :))

  Ответить  
 
 автор: BinLaden   (27.08.2008 в 16:02)   письмо автору
 
   для: Trianon   (27.08.2008 в 14:36)
 

Имею ввиду, что:
0) происходит затрагивание всех рядов, которые находятся между нужной и текущией позициями. А там - просто обмен значений позиций двух записей;
1) необходимо ответвление if($_POST['position']>$realpos) ..., а там - это не имеет значение.

  Ответить  
 
 автор: sl1p   (27.08.2008 в 15:56)   письмо автору
 
   для: BinLaden   (27.08.2008 в 13:39)
 

зачем мне местами)

  Ответить  
 
 автор: Trianon   (27.08.2008 в 14:36)   письмо автору
 
   для: BinLaden   (27.08.2008 в 13:39)
 

>Там есть более оптимальные решения.

Для вставки в непрерывный ряд? Может я чего не понял, но по-моему особо лучше там не сделаешь.

  Ответить  
 
 автор: BinLaden   (27.08.2008 в 13:39)   письмо автору
 
   для: sl1p   (27.08.2008 в 04:50)
 

Вам же советовали поискать по словам "поменять местами". Там есть более оптимальные решения.

P.S. А $_GET['id'] и $_POST['position'] у Вас, конечно, имеют тип integer?

  Ответить  
 
 автор: sl1p   (27.08.2008 в 04:50)   письмо автору
 
   для: 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   (26.08.2008 в 02:17)   письмо автору
 
   для: 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,но как так?

  Ответить  

Сообщения:  [1-10]   [11-14] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования