我有下面的SQL查询。我想获取结果并使用下面的插入将其插入另一个表中。这是存储过程的不错选择。
它不需要经常运行,所以不需要将它附加到触发器......我可能只是编写一个php脚本来通过每小时的cron作业触发它。 (或者我可以通过命令行触发它)
所以,我在这一棵树上吠叫错了吗?谢谢哦,我会接受任何有用的答案。
SELECT
COUNT(*) AS thecount,
MAX(datetime_acc) AS DATE,
u.created_usr,
@payout:=IF(u.created_usr < '2011-01-24',20,10) AS payout,
level_usr,
@uid_usr:=p.uid_usr,
@affiliate:=u.affiliate_aff,
created_usr,
firstname_usr,
lastname_usr,
contact_aff,
c.id_com
FROM payment_acc p
LEFT JOIN users_usr u ON p.uid_usr = u.id_usr
LEFT JOIN commissions_com c ON c.uid_usr = u.id_usr
LEFT JOIN affiliate_aff a ON a.code_aff = u.affiliate_aff
WHERE p.type_acc = 'monthly payment'
AND affiliate_aff IS NOT NULL
GROUP BY p.uid_usr
HAVING thecount > 1
ORDER BY affiliate_aff
INSERT:
Insert into commissions_com
date_generated_com,
amount_com,
uid_usr,
code_aff,
status_com
values
(NOW(),
@payout,
@uid_usr,
@code_aff,
'new')
答案 0 :(得分:1)
您在寻找什么“价值”?
杰夫阿特伍德曾对long time提出质疑存储过程的使用情况。
MySQL 5.0引入了存储过程 这使我们能够自动化或编程 我们直接从众多任务中解脱出来 在服务器而不是必须 编写外部脚本来做复杂的事情 操纵数据。
你习惯于写作存储 MySQL 5.0中的程序,你将如此 使用任何其他编程语言, 想要概括你的存储 程序尽可能多。该 您的存储过程更灵活 是的,可以使用的任务越多 - 你必须去寻找那个难以捉摸的虫子的地方越少 只是一直给你错误 结果。你最终做出的那一天 存储过程的副本只是为了 改变一两个名字就是你的日子 需要思考如何调整 原始程序可以完成什么 你想要不破旧 功能。
根据您所描述的内容,您的脚本听起来不通用或用于多项任务。
暂时,我会避免存储过程。
答案 1 :(得分:1)
使用存储过程是一项战略决策;不应掉以轻心。
MySQL存储过程非常有限,并且有许多缺点:
对我来说,这些都是不使用存储过程的好理由。它们很难写(语言很弱),你必须编写使用“坏”模式的代码,而且它们很难正确编写(难以调试,很难知道里面发生了什么)。
也有很多人引用了一些好处