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 中引入的,因此上面的代码必须正确运行。
我正在尝试创建一个例程(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 中引入的,因此上面的代码必须正确运行。