|
|
|
| Есть запрос:
<?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, '');
|
| |
|
|
|
|
|
|
|
для: aetern
(09.08.2009 в 12:40)
| | Выражение x IN (список) будет истинным, если x встречается среди элементов списка.
pos IN (35, 50) будет истинным для тех строк , где pos было равно 35 либо 50.
Для них же (35+50 - pos) будет соответственно равно 50 либо 35.
А почему собственно не происходит? | |
|
|
|
|
|
|
|
для: Trianon
(09.08.2009 в 12:57)
| | В том-то и дело, что должно, а не происходит.
pos, ранее равный 2 становится равным 1 (здесь работает), а вот pos, который ранее равнялся 1 - остается равным 1, а не 2 (здесь и не работает). | |
|
|
|
|
|
|
|
для: aetern
(09.08.2009 в 13:06)
| | Все заработало! Спасибо за инфу об IN().
У меня была ошибка в другом. | |
|
|
|