Как показать точный результат в 3 таблицы запроса в SQL - PullRequest
0 голосов
/ 29 октября 2019

У меня проблема с моими sql командами. Я пробовал много способов, как сделать запрос к этим 3 таблицам.

         post table
===========================
id | username | post | date 

С 5 строками данных внутри

    profile table
======================
username | bio | name

Также в нем есть 5 данных

     like table
====================
post_id  | username

Это как таблица только 1 данные внутри

Это мой дизайн базы данных для моего простого проекта в социальных сетях. Если я нажму кнопку «Мне нравится», post.id и username будут вставлены в like table. Я хотел посчитать like.post_id, чтобы получить число лайков в каждом сообщении.

Я пытался:

SELECT *, COUNT(like.post_id) AS post_like 
FROM like,post,profile 
WHERE post.username=profile.username AND like.post_id=post.id` 

Проблема в том, что только одна информация извлекается. Я хотел получить 5 данных внутри поста и профиля и post_like в его пост-матче.

Может кто-нибудь помочь мне с этим?

1 Ответ

0 голосов
/ 29 октября 2019

Никогда не используйте запятые в предложении FROM! Всегда используйте правильный, явный синтаксис JOIN.

Тем не менее, я бы подошел к этому, используя коррелированный подзапрос для подсчета:

SELECT p.*, pr.*,
       (SELECT COUNT(*)
        FROM like l
        WHERE l.post_id = p.post_id
       ) AS post_like
FROM post p JOIN
     profile pr
     ON p.username = pr.id  -- this is really strange

Условие JOIN для post иprofile выглядит неверно, но я оставил его.

Коррелированный подзапрос избегает агрегации во внешнем запросе, который обычно является победителем производительности. Вам нужен индекс на likes(user_id) - но вы все равно захотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...