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

Форум MySQL

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

 

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

вид форума:
Линейный форум Структурный форум

тема: разобраться с оператором in()
 
 автор: aetern   (09.08.2009 в 12:40)   письмо автору
 
 

Есть запрос:
   
<?php
$pos_current 
2;
$pos_preview =1;

$query "UPDATE $tbl  SET pos = $pos_current + $pos_preview - pos
                  WHERE pos IN (
$pos_current$pos_preview)";
?>


По идее, должен происходить обмен значений полей pos (2 должен стать 1, а 1 должен стать 2) при помощи одного UPDATE, а не двух, чего не происходит.
Честно говоря, я не понимаю как работает in() в UPDATE запросе.
Помогите разобраться.

Дамп:
--
-- Структура таблицы `table`
--

CREATE TABLE IF NOT EXISTS `table` (
  `id` int(11) NOT NULL auto_increment,
  `small` tinytext NOT NULL,
  `big` tinytext NOT NULL,
  `hide` enum('show','hide') NOT NULL default 'show',
  `pos` int(11) NOT NULL,
  `info` text NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=3 ;

--
-- Дамп данных таблицы `table`
--

INSERT INTO `table` (`id`, `small`, `big`, `hide`, `pos`, `info`) VALUES
(1, 'gallery/files/1.jpg', 'gallery/files/1.jpg', 'show', 1, ''),
(2, 'gallery/files/2.jpg', 'gallery/files/2.jpg', 'show', 2, '');

  Ответить  
 
 автор: Trianon   (09.08.2009 в 12:57)   письмо автору
 
   для: aetern   (09.08.2009 в 12:40)
 

Выражение x IN (список) будет истинным, если x встречается среди элементов списка.
pos IN (35, 50) будет истинным для тех строк , где pos было равно 35 либо 50.
Для них же (35+50 - pos) будет соответственно равно 50 либо 35.
А почему собственно не происходит?

  Ответить  
 
 автор: aetern   (09.08.2009 в 13:06)   письмо автору
 
   для: Trianon   (09.08.2009 в 12:57)
 

В том-то и дело, что должно, а не происходит.
pos, ранее равный 2 становится равным 1 (здесь работает), а вот pos, который ранее равнялся 1 - остается равным 1, а не 2 (здесь и не работает).

  Ответить  
 
 автор: aetern   (09.08.2009 в 13:16)   письмо автору
 
   для: aetern   (09.08.2009 в 13:06)
 

Все заработало! Спасибо за инфу об IN().
У меня была ошибка в другом.

  Ответить  
Rambler's Top100
вверх

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