【发布时间】:2011-12-29 01:00:57
【问题描述】:
我需要一个存储过程的示例,它使用另外两个存储过程(甚至只是一个)的结果,其中结果用作组合存储过程中的表。我可能会从那里拿走它。
web 上的示例(多个站点)和 php.net 上的详细信息过于简单。
基本问题可以在这里看到:
SELECT ttd.person_id, weight, min(test_date)
FROM (
CALL get_team_member_body_stats(1) AS tbs,
CALL get_team_member_first_last_test_date(1) AS ttd
WHERE tbs.person_id = ttd.person_id
AND (tbs.test_date = ttd.first_test OR tbs.test_date = ttd.last_test)
GROUP BY ttd.person_id;
END
感谢您的帮助。昨天和今天,我在网上搜索和实验中已经为此苦苦挣扎了几个小时。
详情:
表 1
存储过程 get_team_member_body_stats(IN team_id INT) 处理 5 个表(person、team、person_team、body_stats、person_body_stats)并生成:
person_id | body_stats_id | weight | test_date |
2 2 200 2011-01-01
4 3 250 2011-01-01
1 5 145 2011-03-01
2 6 210.4 2011-03-01
5 7 290 2011-03-01
1 8 140 2011-04-01
1 9 135 2011-05-01
4 11 245 2011-05-01
表 2
存储过程 get_team_member_first_last_test_date(IN team_id INT) 作用于相同的表并产生:
person_id | first_test | last_test
1 2011-03-01 2011-05-01
2 2011-01-01 2011-03-01
4 2011-01-01 2011-05-01
5 2011-03-01 2011-03-01
目标是加入这些并产生:
表 3
person_id | first_weight | last_weight
1 145 135
2 200 210.4
4 250 245
5 290 290
谢谢
【问题讨论】:
-
我觉得这个总结很不错,+1。如果我是你,我会考虑删除其余部分(因为这不容易理解)
-
问题:1. sp1 (IN team_id INT) 返回 person_id、weight、test_date 的“表”。 2. sp2 (IN team_id INT) 返回 person_id、start_test、last_test 的“表” 3. 尝试生成 sp3 (IN team_id INT),它将加入这些并返回 person_id、weight、start_date 的“表”。
-
关于这个问题(我实际上不得不看原文),乍一看,在我看来,您需要的东西完全可以在没有存储过程的情况下完成。涉及多少张表?也许您可以发布
另一个问题,其中包含相关表格和您期望的结果。 -
@Lieven,坏主意。米歇尔,请对这个问题进行任何相关的编辑。
-
@MichaelPetrotta - 这将是一个完全不同的问题(这个问题无法稳健地解决)。我相信 OP 在提出这个问题时已经考虑到了一个特定的解决方案,而他/她应该不考虑这个解决方案(有一个术语,但现在我没有想到)。无论如何,这个问题已经吸引了所有的 cmets,OP 不妨删除这个并发布一个新的。
标签: mysql sql stored-procedures