Проблема в mysql. Как сделать.

MySQL

Скажем есть такое поле в таблице, как active,
есть кучу записей, этим полем определяется активность.
Есть функция, сделать активным запись. Следовательно предыдущая запись с active=1 превращается в active=0, а новой присваивается active=1
Можно ли в запросе update найти поле с active=1, и заменить его на active=0, затем присвоить единичку другой записи. Думаю это надо в два запроса делать?
Надо еще такую штуку, чтобы если одно из действий не сработало, все вернулось на свои места. Не помню названия этой штуке. Транзакция вроде.

Примечание:
Примерный запрос, если можно напишите.

Примечание:
zeloras, не поверишь, это и делается через php. Вопрос не о том, как сделать на php, а как сделать на mysql. Читай лучше. В php запросы вставить сам смогу, а сделать то, что я написал точно можно в БД. Что за привычка писать не пойми чего, не имеющее к вопросу отношения? Если можешь на php написать, написал бы на php, а не кидался бы словами.

Примечание:
"1-active"
это значит = 0?
так понял запрос только на обновление старой записи?
Новое присвоение единички к active надо отдельно делать?

Примечание:
А old_id это запись, где сделать с 1 на 0? Так старый неизвестен, его тоже в бд надо выбирать...

Хе, заминусовали. Это кулхацкеры зашли, поняли , что им не по зубам задача, поставили единичку и убежали, рыдая -)

Примечание:
Спасибо.
А как выудить тогда old.id?

table_name.id - это зачем тут нужно? Просто интересно
Ответы:
Хммм...ну тут по идеи легче всего сделать используя php :)
update table_name set active=1-active where table_name.id in (old_id, new_id);
table_name - имя изменяемой таблицы
id - первичный ключ таблицы
old_id - идентификатор старой записи
new_id - идентификатор новой записи
Или так:
update table_name set active=1-active where table_name.id=new_id or table_name.active=1;
Нет, new_id - это идентификатор той записи, у которой ты хочешь выставить active=1. Раз у нее текущее значение active равно 0, то оно заменится на 1.
В таблице после выполнения запроса у тебя должны измениться две записи.
Артёмка дал правильный ответ.
"1-active" заменит 0 на 1 и 1 на 0 для двух записей с id = new_id и id = old_id
В операторе
"update table_name set active=1-active where table_name.id=new_id or table_name.active=1;"
Забудь :))


16 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.