在MySQL中创建一行函数

在MySQL中创建一行函数,mysql,stored-functions,Mysql,Stored Functions,我创建了以下函数: 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

我创建了以下函数:

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\u id
client\u id
messenger
ref\u id
放在一行中?

在phpmyadmin中添加此函数的例程下,您将找到一个添加参数的选项。见下图-


这个选项适合你吗

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));

图中有两行。我想要管理员id、客户端id、messenger、参考id在一行中。Tks.

替换
在第二次查询中插入
替换

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完全相同,只是如果表中的一个旧行与主键或唯一索引的新行具有相同的值,则在插入新行之前会删除旧行


事实上,他想要的是:

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$$

你所说的给予是什么意思?您是在问如何在mysql中调用用户定义的函数吗?与调用任何预定义函数的方式相同。ID字段是否自动递增?能否帮助我Dennis:)messenger表中的ID是否自动递增编辑不太可能执行此请求。您可以触发表插入,并在此处记录感叹词后在此处获取
id
的值。然后,更改
ref\u id
的值。抱歉,我只能使用存储函数:(