MYSQL 5.1.51-带 if 语句的社区存储过程

MYSQL 5.1.51-community Stored Procedure with if statement

我正在尝试创建一个例程(MySQL 5.1.51 社区版上的存储过程),在用户首次访问网站时更新用户编号

这是套路

BEGIN

-- first routine
UPDATE `tbl_1` q
JOIN (
    SELECT
        m.UserNumber,
        m.sUpdate
    FROM
        `tbl_1` t
    JOIN `tbl_2` m ON t.UserNumber = m.UserNumber
    WHERE
        t.UserDate IS NULL
) x
SET q.UserNumber = x.UserNumber
WHERE
    q.UserNumber = x.UserNumber
AND x.sUpdate IS NULL;

-- second routine
UPDATE `tbl_2` q
JOIN (
    SELECT
        m.UserNumber,
        m.sUpdate
    FROM
        `tbl_1` t
    JOIN `tbl_2` m ON t.UserNumber = m.UserNumber
) x
SET q.sUpdate = 1
WHERE
    q.UserNumber = x.UserNumber;

END

但我只需要在 -- first routine 实际更新 tbl_1

上的一行时执行 -- second routine

感谢大家的帮助!

更新 #2

BEGIN

SET @LastUpdateUserNumber := NULL;

-- first routine
UPDATE `tbl_1` q
JOIN (
    SELECT
        m.UserNumber,
        m.sUpdate
    FROM
        `tbl_1` t
    JOIN `tbl_2` m ON t.UserNumber = m.UserNumber
    WHERE
        t.UserDate IS NULL
) x
SET q.UserNumber = x.UserNumber,
    q.UserNumber = (SELECT @LastUpdateUserNumber := x.UserNumber)
WHERE
    q.UserNumber = x.UserNumber
AND x.sUpdate IS NULL;

SELECT @LastUpdateUserNumber AS LastUpdateUserNumber;

IF ROW_COUNT() THEN
-- second routine
UPDATE `tbl_2` q
SET q.sUpdate = 1
WHERE
    q.UserNumber = (SELECT @LastUpdateUserNumber);

END IF;

END

更新

BEGIN

-- first routine
UPDATE `tbl_1` q
JOIN (
    SELECT
        m.UserNumber,
        m.sUpdate
    FROM
        `tbl_1` t
    JOIN `tbl_2` m ON t.UserNumber = m.UserNumber
    WHERE
        t.UserDate IS NULL
) x
SET q.UserNumber = x.UserNumber
WHERE
    q.UserNumber = x.UserNumber
AND x.sUpdate IS NULL;

IF ROW_COUNT() THEN
-- second routine
UPDATE `tbl_2` q
JOIN (
    SELECT
        m.UserNumber,
        m.sUpdate
    FROM
        `tbl_1` t
    JOIN `tbl_2` m ON t.UserNumber = m.UserNumber
) x
SET q.sUpdate = 1
WHERE
    q.UserNumber = x.UserNumber;

END IF;

END

在 5.5+ 版本中,这可能是:

BEGIN
    -- first routine
    IF ROW_COUNT() THEN
        -- second routine
    END IF;
END

测试...也许这适用于您的版本。


更新

我找到了 5.1 版本的手册副本 (http://www.mysql.ru/docs/mysql-man-5.1-en/)。它声称 ROW_COUNT() 函数是在 5.0.1 中引入的,因此上面的代码必须正确运行。