2015-11-12 2 views
0

Я создал функцию:Создание функции в MySQL в 1 Роу

CREATE FUNCTION `push_admin`(`p_messenger` text, `p_admin_id` int(20), `p_client_id` int(20)) 
RETURNS INTEGER 
BEGIN 
    INSERT INTO messenger(admin_id, client_id, messenger) 
     VALUES (p_admin_id, p_client_id, p_messenger); 
    INSERT INTO messenger(ref_id) 
     SELECT id FROM messenger WHERE client_id = p_client_id; 
    RETURN LAST_INSERT_ID();  
END$$ 

Как я могу дать admin_id, client_id, messenger, ref_id в 1 строке?

+0

Что вы имеете в виду, давая? Вы спрашиваете, как вызвать определенную пользователем функцию в mysql? Точно так же, как вы называете любую заранее определенную функцию. – Shadow

ответ

0

В вашем phpmyadmin под процедурами, в которых вы добавили эту функцию, вы найдете возможность добавлять параметры. видите изображения ниже -

enter image description here

0

Этот вариант подойдет вам?

INSERT INTO messenger(admin_id, client_id, messenger, ref_id) 
VALUES (p_admin_id, p_client_id, p_messenger, (SELECT id FROM messenger WHERE client_id = p_client_id)); 
+0

Я старался, но не работал. –

+0

Автоинкрементное поле ID? –

+0

Помогите мне Dennis :) –

0

Referring image added в картине 2 ряда. Я хочу admin_id, client_id, messenger, ref_id в 1 строке. Tks.

0

Заменить INSERT во втором запросе на REPLACE

CREATE FUNCTION `push_admin`(`p_messenger` text, `p_admin_id` int(20), `p_client_id` int(20)) 
RETURNS INTEGER 
BEGIN 
    INSERT INTO messenger(admin_id, client_id, messenger) 
     VALUES (p_admin_id, p_client_id, p_messenger); 
    REPLACE INTO messenger(ref_id) 
     SELECT id FROM messenger WHERE client_id = p_client_id; 
    RETURN LAST_INSERT_ID();  
END$$ 

Это поможет вам?

REPLACE работает точно так же, как и INSERT, за исключением того, что если старая строка в таблице имеет то же значение, что и новая строка для PRIMARY KEY или UNIQUE, старая строка удаляется перед вставкой новой строки.

See REPLASE syntax

0

На самом деле, он хотел это:

CREATE FUNCTION `push_client`(`p_email` text, `p_messenger` text, `p_phone` text, `p_domain` text, `p_ip` text, `p_browser` text, `p_admin_id` int(20), `p_client_id` int(20)) 
RETURNS INTEGER 
BEGIN 
    SET @id = 0; 

    SELECT id INTO @id FROM messenger WHERE client_id = p_client_id AND admin_id = p_admin_id; 

    INSERT INTO client(ref_id, email, phone, ip, browser) 
     VALUES(@id, p_email, p_phone, p_ip, p_browser); 

    UPDATE client SET domain_id = (SELECT id FROM domain WHERE name = p_domain); 

    INSERT INTO messenger(client_id) 
     SELECT id FROM client WHERE id = p_client_id; 

    UPDATE messenger 
    SET admin_id = p_admin_id, browser = p_browser, messenger = p_messenger 
    WHERE client_id = p_client_id; 

    RETURN LAST_INSERT_ID();  
END$$