Вызов хранимой процедуры с использованием значения из второй хранимой процедуры для получения одного результата? - PullRequest
0 голосов
/ 06 августа 2011

Я решил изучать хранимые процедуры в MySQL, но с синтаксисом, который сильно отличается от моего обычного топания (php / javascript), я надеялся определить, правильно ли мое понимание возможностей этих процедур, и если да, то как я добьюсь того, чего я хочу.

В настоящее время у меня есть две таблицы 'people' и 'posts':

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 будет возвращать данные записей из соответствующей строки в таблице записей , но также вызовите процедуру getPerson для столбца author_id, чтобы один возвращаемый результат состоял из полей: post_id, long_name, index_name, body_text, created.

Я пробовал и допустил ошибку в течение пары часов, и, хотя в какой-то момент у меня, возможно, был правильный подход (использовать соединение по результату getPerson?), Мой синтаксис sql не намного расширился за один раз. MySQL звонки из PHP. Мои вопросы:

  1. Это общий / разумный подход к тому, что я хочу сделать, или есть что-то лучше? (Я не хочу использовать язык сценариев)
  2. Если так, может кто-нибудь поделиться, как это сделать?
  3. Правильно ли я использовать процедуру для такого рода вещей, или функция является хорошей / лучшей?

Спасибо за любую помощь!

1 Ответ

0 голосов
/ 09 августа 2011

Почему бы вам просто не создать представление с именем viewPeoplePosts , которое объединяет людей и их сообщения . Затем вы можете изменить свой сохраненный процесс для запроса представления. Пусть представление сделает всю тяжелую работу , и пусть хранимая процедура просто вернет результат.

...