Я довольно новичок в pg и пытаюсь выяснить, какой лучший подход заключается в загрузке набора сообщений и связанных с ними комментариев вместе.Как загрузить 2 связанных набора данных вместе? (i.e сообщения и комментарии)
Например: Я пытаюсь получить 10 сообщений и комментариев, связанных со всеми этими сообщениями, например facebook wall, где вы видите фид сообщений и комментариев, загруженных на ту же страницу. Моя схема выглядит примерно так:
Posts
--------
id - author - description - date - commentCount
Comments
-------
id - post_id - author - description - date
Я пытался загрузить оба сообщения и комментарии на одной и той же функции Postgres делает следующие файлы:
select *
from posts
LEFT join comments on posts.id = comments.post_id
, к сожалению, она дублирует сообщения N раз, где комментарий существует, где N - количество комментариев, которые имеет сообщение. Однако первое решение является то, что я всегда могу отфильтровать его в узел после извлечения данных
Кроме того, когда я пытаюсь использовать группу по posts.id (чтобы сделать его легче пройти в узле), я получаю следующее ошибка:
column "comments.id" must appear in the GROUP BY clause or be used in an aggregate function
Второй, что я могу попробовать, чтобы отправить массив post_ids Я хочу, чтобы загрузить и иметь pg_function груз и отправить их обратно, но я не могу совсем право запроса:
CREATE OR REPLACE FUNCTION "getPosts"(postIds int[])
RETURNS text AS
$BODY$
BEGIN
RETURN (
SELECT *
FROM Comments
WHERE Comments.id = postIds[0]
);
END;$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
назвать:
SELECT n FROM "public"."getPosts"(array[38]) As n;
Однако, даже при попытке получить значение из одного индекса, я получаю следующее сообщение об ошибке:
ERROR: subquery must return only one column
LINE 1: SELECT (
^
QUERY: SELECT (
SELECT *
FROM Comments
WHERE Comments.id = 38
)
Наконец, последнего решения является простым макияжем N Seperate вызовы postgres, где N - количество сообщений с комментариями, поэтому, если у меня есть 5 сообщений с комментариями, я делаю 5 вызовов postgres с post_id и выбираю из таблицы комментариев.
Я действительно не уверен, что делать здесь, любая помощь будет оценена по достоинству.
Благодаря
Первым решением является самым простым и быстрый. Другим потребуются два запроса и две поездки на сервер. О _duplicated_ сообщениях, которые так относятся к реляционным базам данных, и это проблема, с которой лучше справиться в уровне представления. –
Вы используете только sql? –
im использование postgres с узлом – Saad