Нужен запрос для выбора конкретных комментариев с именем автора - PullRequest
0 голосов
/ 12 мая 2018

У меня база данных содержит 3 таблицы, как показано ниже:

CREATE TABLE users
(
    id SERIAL PRIMARY KEY,
    name VARCHAR(30) NOT NULL,
    password VARCHAR(60) NOT NULL,
    phone VARCHAR(10) NOT NULL,
    email VARCHAR(30) UNIQUE
);

CREATE TABLE posts 
(
    id SERIAL PRIMARY KEY,
    body TEXT NOT NULL,
    user_id INTEGER REFERENCES users(id) 
);

CREATE TABLE comments
(
    id SERIAL PRIMARY KEY,
    body TEXT NOT NULL,
    post_id INTEGER REFERENCES posts(id),
    user_id INTEGER REFERENCES users(id)
    -- parent_id INTEGER REFERENCES comments(id)
);

Мне нужен запрос, чтобы выбрать все комментарии для одного конкретного поста, используя идентификатор этого поста.То, что заставило меня изо всех сил, - то, как выбрать имя пользователя, который написал комментарий!

Вот что я пытался:

select  
    c.body as cbody, p.body as pbody, c.user_id as user_id 
from 
    users u 
inner join 
    posts p on u.id = p.user_id 
inner join 
    comments c on c.post_id = p.id 
where 
    p.id=($1)

Любая помощь ??

1 Ответ

0 голосов
/ 12 мая 2018

Я бы использовал таблицу Comments в качестве первой таблицы в предложении FROM, поскольку это ваша основная таблица для данных вашего запроса. (Только личные предпочтения, а не требование.)

После этого я присоединюсь к таблице «Пользователи» на Comments.user_id, чтобы узнать авторов комментариев.

Вы, вероятно, не хотите, чтобы тело сообщения включалось в каждый комментарий, поэтому я бы пропустил это.

Итак, мой запрос будет выглядеть примерно так:

SELECT c.body AS cbody, c.user_id AS user_id, u.name AS uname
FROM Comments c LEFT JOIN Users u ON u.id = c.user_id
WHERE c.post_id=($1);

INNER JOIN тоже может быть действительным, но вы должны быть уверены, что Comments.user_id всегда заполнен. Когда Comments.user_id имеет значение NULL, комментарий не будет включен в результат запросов при использовании INNER JOIN.

...