使用第二个存储过程中的值调用存储过程以产生单个结果?

时间:2011-08-06 18:20:17

标签: mysql stored-procedures stored-functions

我决定自学MySQL中的存储过程,但是语法与我常用的st((php / javascript)非常不同,我希望确定我对这些过程的功能的理解是否正确,如果是这样,我如何实现我的目标。

目前,我有两个表,'人'和'帖子',如下所示:

people
person_id INT(10)
first_name VARCHAR(32)
last_name VARCHAR(64)

posts
post_id INT(10)
author_id INT(10)
body_text TEXT
created DATETIME

由此,我创建了一个简单的通用存储过程,如下所示:

DELIMITER //
CREATE PROCEDURE getPerson(IN person INT(10))
  BEGIN
    SELECT CONCAT(first_name, ' ', last_name) as long_name, CONCAT(last_name, ', ', first_name) as index_name FROM people WHERE person_id = person;
  END //
DELIMITER ;

到目前为止一直很好,但是现在我的理解失败了...我想创建一个名为'getPost'的第二个过程,当传递给post_id时,将从posts表中的相应行返回post数据,还要在author_id列上调用getPerson过程,以便返回的单个结果将包含以下字段:post_id, long_name, index_name, body_text, created

我已经试用了几个小时的错误,虽然我可能在某一时刻采用了正确的方法(对getPerson的结果使用连接?),但我的sql语法并没有超出单一的范围 - MySQL从MySQL调用的语句。我的问题是:

  1. 这是我想做什么的常见/合理方法还是有更好的方法? (我不想使用脚本语言)
  2. 如果是这样,有人可能会分享如何做到这一点吗?
  3. 我是否正确使用这种方法的程序,或者是一个好/更好的功能?
  4. 感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

为什么不创建一个名为 viewPeoplePosts 的视图,该视图结合了人员及其帖子。然后,您可以修改存储过程以查询视图。让视图完成所有艰苦的工作,让存储过程只返回结果。