За последние 24 часа нас посетили 17417 программистов и 1601 робот. Сейчас ищут 954 программиста ...

Выполнить запрос по условию.

Тема в разделе "MySQL", создана пользователем parasit, 12 ноя 2007.

  1. parasit

    parasit Активный пользователь

    С нами с:
    31 июл 2007
    Сообщения:
    32
    Симпатии:
    0
    Возможно ли организовать запрос по принципу:

    (чтобы он выполнился на стороне мускула)

    если два поля в одной строчке совпали с переданными переменными то update ...
    если нет совпадения то insert ....
     
  2. armadillo

    armadillo Активный пользователь

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    replace лично я не пользуюсь,
    insert ... on duplicate key update немного не то.
    Видимо нет.
     
  3. Goryn

    Goryn Активный пользователь

    С нами с:
    4 апр 2006
    Сообщения:
    398
    Симпатии:
    0
    Адрес:
    Ярославль
    Хранимая процедура решит проблему.
     
  4. parasit

    parasit Активный пользователь

    С нами с:
    31 июл 2007
    Сообщения:
    32
    Симпатии:
    0
    можете ссылку дать на описание данного?

    -- нашёл на официальном сайте. Вопрос другой возник - Все данные процедуры хранятся на время текущей работы мускула или где-то хранятся в таблицах. (Просто не всё прочёл пока.)
     
  5. parasit

    parasit Активный пользователь

    С нами с:
    31 июл 2007
    Сообщения:
    32
    Симпатии:
    0
    И еще вопрос! Есть ли команда позволяющая вытащить сколько строк апдейтилось.

    тоесть mysql_affected_rows - чтоб еще на стороне мускула знать.

    просто надо выстроить условие по количеству строк после апдейта ))
     
  6. parasit

    parasit Активный пользователь

    С нами с:
    31 июл 2007
    Сообщения:
    32
    Симпатии:
    0
    Ага я вот нашёл что как но процедура не получатся, что не так?


    CREATE PROCEDURE one ()
    BEGIN
    DECLARE a INT;
    UPDATE pro SET `field` = 'name' WHERE id = 1 AND main = 1;
    SET a = ROW_COUNT();
    IF a = 0 THEN INSERT INTO pro (`name`) VALUES ('error');
    END IF;
    END;

    SELECT version = 5.0.27-community-nt
    Первое он ругается на строку DECLARE a INT;