Я решил изучать хранимые процедуры в 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. Мои вопросы:
- Это общий / разумный подход к тому, что я хочу сделать, или есть что-то лучше? (Я не хочу использовать язык сценариев)
- Если так, может кто-нибудь поделиться, как это сделать?
- Правильно ли я использовать процедуру для такого рода вещей, или функция является хорошей / лучшей?
Спасибо за любую помощь!