Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.08.2010, 14:11   #1
InternetStranger
php / delphi
Форумчанин
 
Аватар для InternetStranger
 
Регистрация: 10.06.2007
Сообщений: 175
По умолчанию Инвертировать значение поля (INT) одним запросом

День добрый) С прошедшим днем Сисодмина

Знания SQL довольно базовые. В общем, задача такая:
Имеется целочисленное поле "field". Может принимать т/о значения 0 и 1.

Требуется организовать операцию переключения из одного состояния в другое (инверсии).
Математически инвертировать значение довольно просто:
PHP код:
$new abs($old-1); 
В два запроса это сделать как-бы не проблема:
Код:
SELECT `field` FROM `table` WHERE `id`=5;
UPDATE `table` SET `field` = '0' WHERE `id` =5;
Интуиция подсказывает, что можно и одним запросом обойтись.
не помню вот. Объединение запросов, оно ведь вроде только для выборки SELECT работает?

Хотелось бы узнать какие есть варианты решения задачи с использованием подзапросов и без них.
G.Azamat { Web Development / Computer simulation }
Начинающий программист думает, что в килобайте 1000 байтов, а законченный уверен, что в километре 1024 метра.

Последний раз редактировалось InternetStranger; 03.08.2010 в 14:14.
InternetStranger вне форума Ответить с цитированием
Старый 03.08.2010, 14:21   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Я может ща глупость сморожу но:
Код:
UPDATE `table` SET `field` = not field WHERE `id` =5;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.08.2010, 14:38   #3
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

newval=abs(val-1)
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 03.08.2010, 15:42   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Код:
SELECT `field` FROM `table` WHERE `id`=5;
UPDATE `table` SET `field` = '0' WHERE `id` =5;
простите, но в данном примере эти ДВА разных запроса и они НИКАК вообще не связаны!

Update асболютно независимо выполнится без верхнего SELECT ...

поясните, что означает:
Цитата:
Требуется организовать операцию переключения из одного состояния в другое (инверсии).
Serge_Bliznykov вне форума Ответить с цитированием
Старый 03.08.2010, 23:22   #5
InternetStranger
php / delphi
Форумчанин
 
Аватар для InternetStranger
 
Регистрация: 10.06.2007
Сообщений: 175
По умолчанию

Прошу прощения, походу забыл упомянуть, где это все используется: на сайте: php+mySQL. Запросы привел просто для примера (показать какие операции необходимо совершить).

Опишу поподробнее, что за задача стоит:
Есть таблица со статьями. Одно из полей отвечает за параметр "опубликована/снята с публикации" (допустим поле "field" таблицы table).
AJAX-запросом вызывается php-скрипт переключения состояния статьи, т.е. если статья была опубликована, н/о ее снять с публикации, и наоборот: если была снята - опубликовать.
Технически нужно просто изменить значение поля "field" определенной записи на противоположное (с 0 на 1, или с 1 на 0).

Проблема в том, что скрипт знает т/о id записи и не знает текущего значения поля "field" для этой записи.
Первым запросом мы узнаем, опубликована ли статья,
а втором запросом установим для этой записи новое значение.
Вот я и спрашиваю, нет ли какой хитрой операции, чтобы выполнить эти действия за один запрос?
G.Azamat { Web Development / Computer simulation }
Начинающий программист думает, что в килобайте 1000 байтов, а законченный уверен, что в километре 1024 метра.
InternetStranger вне форума Ответить с цитированием
Старый 03.08.2010, 23:57   #6
InternetStranger
php / delphi
Форумчанин
 
Аватар для InternetStranger
 
Регистрация: 10.06.2007
Сообщений: 175
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Я может ща глупость сморожу но:
Код:
UPDATE `table` SET `field` = not field WHERE `id` =5;
Обладеть... Работает ))
Я сам думал, что глупость, потому и не пробовал. Ну раз человек предложил, думаю, просто обязан попробовать ))
Спасибо, в общем.

Правда я немного вкуриваю, как операция NOT действует на целое число.
G.Azamat { Web Development / Computer simulation }
Начинающий программист думает, что в килобайте 1000 байтов, а законченный уверен, что в километре 1024 метра.
InternetStranger вне форума Ответить с цитированием
Старый 04.08.2010, 00:30   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

так, а поясните, чем не устраивает Ваш же вариант:
Код:
UPDATE `table` SET `field` = abs(`field` - 1) WHERE `id` =5;
?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 04.08.2010, 11:50   #8
InternetStranger
php / delphi
Форумчанин
 
Аватар для InternetStranger
 
Регистрация: 10.06.2007
Сообщений: 175
По умолчанию

Цитата:
так, а поясните, чем не устраивает Ваш же вариант:
Код:

UPDATE `table` SET `field` = abs(`field` - 1) WHERE `id` =5;
Так всем и устраивает, просто я не вкурсе был, что в этом запросе можно оперировать полем
Код:
`field` = abs(`field` - 1)
Всем спасибо)
G.Azamat { Web Development / Computer simulation }
Начинающий программист думает, что в килобайте 1000 байтов, а законченный уверен, что в километре 1024 метра.
InternetStranger вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как получить значение поля грид на основе значения другого lookUp поля malayka БД в Delphi 0 21.04.2010 19:06
Значение поля по умолчанию alco84 Microsoft Office Access 2 16.02.2010 10:17
Как перевести значение ячейки массива char в int в Си SASS Общие вопросы C/C++ 1 10.12.2009 14:44
BETWEEN и LIKE одним запросом Pinya SQL, базы данных 9 19.08.2008 11:30
Определить значение поля у С в C=B+A; Иллидан Общие вопросы C/C++ 6 21.05.2008 19:26