私は2つのメインテーブル - posts
とusers
を持っています。そして、ユーザの好きなポストを行として保存する3番目のテーブル。私は、ユーザーデータと結合された投稿、および現在のユーザーが好きな投稿(user_favs
表の検索)を持っているかどうかを問い合わせる必要があります。インナーは2つのテーブルを結合し、第3のテーブルからカウントを結合します
は最終的に私は、クライアントに次のようなものを返したい:
{
post_id: '...',
title: '...',
user_id: '...',
username: '...',
isFavourited: isFaved > 0 ? true : false
}
は1つの選択クエリを行うことが、このことは可能ですか?
CREATE TABLE posts (
post_id uuid,
title text
author_id uuid
);
CREATE TABLE users (
user_id uuid,
username text
);
CREATE TABLE user_favs (
user_id uuid REFERENCES users ON DELETE CASCADE,
post_id uuid REFERENCES posts ON DELETE CASCADE
);
私のクエリは次のようになります。
SELECT
p.post_id,
p.title,
u.user_id,
u.username,
count(f.*) as isfaved
FROM posts p
JOIN users u
ON p.author_id = u.user_id AND p.post_id = '1234'
LEFT JOIN user_favs f
ON f.user_id = p.author_id AND f.post_id = '1234'
私も試してみた:
SELECT
p.post_id,
p.title,
u.user_id,
u.username,
FROM posts p
JOIN users u
ON p.author_id = u.user_id AND p.post_id = '1234'
LEFT JOIN
(SELECT count(*) FROM user_favs
) f ON f.user_id = p.author_id AND f.post_id = '1234'
編集:ちょうど私が達成するために望んでいるものを明確にする:私はフェッチてるのその投稿のそれぞれの著者を返信し、さらに、その投稿が要求しているユーザによって優先されているかどうかをチェックする。
あなたは 'つまり、あなたの例では多くのエラーを(持っていますpost_id uuid REFERENCES users')。読むのは難しいです。 –
ユーザーが自分の投稿をお気に入りにしているかどうか、またはユーザーが*任意の*ユーザーによって投稿をお気に入りにしているかどうかを確認しようとしていますか? –
後者です。したがって、投稿を取得し、その投稿のそれぞれの著者を返信して、その投稿が要求しているユーザによって優先されているかどうかを確認します。私は明確にするために質問を更新します。 –