Отправляет email-рассылки с помощью сервиса Sendsay

RFpro.ru: Базы данных MySQL

  Все выпуски  

RFpro.ru: Базы данных MySQL


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный хостинг на базе Linux x64 и Windows x64

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Чемпионы рейтинга экспертов в этой рассылке

Гуревич Александр Львович
Статус: Специалист
Рейтинг: 4228
∙ повысить рейтинг »
lamed
Статус: Практикант
Рейтинг: 2239
∙ повысить рейтинг »
_Ayl_
Статус: Практикант
Рейтинг: 1867
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И ПО / Программирование / Базы данных MySQL

Номер выпуска:453
Дата выхода:11.04.2010, 22:30
Администратор рассылки:Victor Pyrlik, Модератор
Подписчиков / экспертов:602 / 188
Вопросов / ответов:1 / 2

Вопрос № 177706: Здравствуйте! Меня интересует как нижеприведенные запросы можно реализовать в виде одного запроса. Существует запрос с проверкой условия:

Код:
   
Вопрос № 177706:

Здравствуйте!

Меня интересует как нижеприведенные запросы можно реализовать в виде одного запроса.

Существует запрос с проверкой условия:

Код:
SELECT if( id_user =32 IS NULL , 0, 1 ) AS result1 FROM `table`


Если существует запись с id = 32, то запрос выдает 1, в противном случае 0

Меня интересует, как в этот запрос можно добавить другие запросы. Поясню:
Скажем, если условие выполняется, то есть существует строка с id=32, то выполняется запрос UPDATE … WHERE …
А вот если строки с id=32 нет, то выполняется запрос INSERT …

Я прекрасно понимаю, что это можно сделать с помощью двух запросов и с проверкой в PHP, но хотелось бы оформить по возможности одним запросом.
Большое спасибо.

Отправлен: 06.04.2010, 22:01
Вопрос задал: averty, Посетитель
Всего ответов: 2
Страница вопроса »


Отвечает Hromovnik, 4-й класс :
Здравствуйте, averty.
К сожалению, выражение с оператором IF не даёт возможности вставлять подзапросы или условия внутри себя.
Я бы на Вашем месте воспользовался оператором CASE. Подробнее смотрите в приложении.

Как видите, тут можно использовать как значения, так и условия. Первый вариант вернёт результат, где value=compare_value. Второй - результат первого условия, если оно возвращает true, если false, то получите результат после ELSE или NULL, если не используете ELSE. Подробное описание на английском можно найти на официальном сайте MySQL: http://dev.mysql.com/doc/refman/5.1/en/control-flow-functions.html

В Вашем случае, Я думаю, что запрос будет выглядеть приблизительно так: см. в приложении.

Приложение:

-----
Достигнув вершины горы, иди дальше...

Ответ отправил: Hromovnik, 4-й класс
Ответ отправлен: 06.04.2010, 23:18
Номер ответа: 260649

Вам помог ответ? Пожалуйста, поблагодарите эксперта за это!
Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 260649 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:

  • Отвечает vladisslav, 5-й класс :
    Здравствуйте, averty.
    Вариант, предложенный в ответе № 260649 от Hromovnik в простом запросе работать не будет.
    Если в таблице table присутствует PRIMARY KEY (id_user), то можно сделать так (Внимание! MySql специфичное расширение SQL. В других БД работать не будет.)
    Код:
    INSERT
    INTO `table` SET id_user=32,name='user 32' ON DUPLICATE KEY UPDATE name='user 32'

    Либо использовать 2 отдельных запроса, завернутых в транзакцию (должно работать в большинстве других БД).

    Ответ отправил: vladisslav, 5-й класс
    Ответ отправлен: 07.04.2010, 10:13
    Номер ответа: 260652

    Вам помог ответ? Пожалуйста, поблагодарите эксперта за это!
    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 260652 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:

  • Оценить выпуск »
    Нам очень важно Ваше мнение об этом выпуске рассылки!

    Задать вопрос экспертам этой рассылки »

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров »

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


    © 2001-2010, Портал RFpro.ru, Россия
    Авторское право: ООО "Мастер-Эксперт Про"
    Автор: Калашников О.А. | Программирование: Гладенюк А.Г.
    Хостинг: Компания "Московский хостер"
    Версия системы: 2010.6.14 от 03.03.2010

    В избранное