0

MySQLのストアドプロシージャについて自分自身を教育することにしましたが、構文が通常の踏み台(php / javascript)とはかなり異なるため、これらのプロシージャの機能についての理解が正しいかどうかを判断したいと思っていました。 、私が求めているものをどのように達成するか。

現在、次のように「people」と「posts」の2つのテーブルがあります。

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」という2番目のプロシージャを作成します。このプロシージャは、post_idを渡すと、postsテーブルのそれぞれの行からpostデータを返します。 author_id列でgetPersonプロシージャを呼び出して、返される単一の結果が次のフィールドで構成されるようにしますpost_id, long_name, index_name, body_text, created

私は数時間試してエラーを出しました。ある時点で正しいアプローチをとっていたかもしれませんが(getPersonの結果に結合を使用しますか?)、私のSQL構文はシングルステートメントのMySQL呼び出しをはるかに超えて拡張されていませんPHPから。私の質問は次のとおりです。

  1. これは私がやりたいことへの一般的で合理的なアプローチですか、それとももっと良いものがありますか?(スクリプト言語は使いたくない)
  2. もしそうなら、誰かがこれを行う方法を共有できますか?
  3. 私はこの種の手順を使用するのが正しいですか、それとも関数は良い/良いですか?

助けてくれてありがとう!

4

1 に答える 1

0

People とその Postsを組み合わせたviewPeoplePostsというビューを作成してみませんか。次に、ストアド プロシージャを変更してビューをクエリできます。ビューに面倒な作業をすべて任せて、ストアド プロシージャに単純に結果を返させます。

于 2011-08-09T11:13:33.773 に答える