SQL-запрос не дает желаемого результата

У меня две таблицы

  1. tbl_message

    id | user_id | user_name |message | society_id
    1 -- 252----- Shubham----- HeyHi--------- 3
    2 -- 252----- Shubham----- HeyHi--------- 3
    3 -- 250----- Rahul---------- HeyHi--------- 3
    4 -- 251----- Sachin--------- HeyHi--------- 3
    
  2. tbl_submessage

    id | post_id | user_id | submessage
    1-----1----------252---------Hi-
    2-----1----------252---------Hi-
    3-----1----------253---------Hi-
    4-----1----------253---------Hi-
    5-----1----------253---------Hi-
    6-----2----------254---------Hi-
    7-----2----------254---------Hi-
    


Мне нужно подсчитать количество вложенных сообщений в таблице tbl_submessage, чей post_id = id сообщения в tbl_message.
В основном tbl_message содержит сообщение форума и tbl_submessage состоят из разговоры в этом посте.

Я попробовал следующий запрос.

SELECT tk.*,COUNT(tp.id) FROM tbl_message  tk,tbl_submessage  tp WHERE tk.society_id=3 and  tk.id=tp.post_id;


Этот запрос возвращает
id | user_id | имя_пользователя | сообщение | Society_id | COUNT (tp.id)
1 - 252 ----- Шубхам ----- Привет, привет --------- 3 ----------- 7


Я хочу

id | user_id | имя_пользователя | сообщение | Society_id | COUNT
1 - 252 ----- Шубхам ----- Привет, привет --------- 3 --------- 5
2 - 252 ----- Шубхам ----- Привет, привет --------- 3 --------- 2
3 - 250 ----- Рахул ---------- Привет, привет --------- 3 --------- 0
4 - 251 ----- Сачин --------- Привет, привет --------- 3 --------- 0

Пожалуйста, помогите мне с вопросом.

ничего общего с запросом. в вашей cpanel дайте разрешение этому пользователю на доступ и изменение этой базы данных

arun 07.05.2018 12:49

Проверьте права и разрешения вашего пользователя в базе данных

Riccardo 07.05.2018 12:57

Первая ошибка: вы написали tp.COUNT(id), а вам нужно написать COUNT(tp.id).

FDavidov 07.05.2018 13:54

@FDavidov Я исправил свой запрос, ошибка исчезла, но я не получаю желаемого результата. Думаю, мой запрос неверен.

Saket Mayank 07.05.2018 20:05
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
4
64
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Есть пара проблем с вашим запросом: вам нужно изменить соединение на левое соединение, чтобы получить пользователей, у которых нет суб-сообщений, и добавить GROUP BY, чтобы выдавать результаты для каждого пользователя. Попробуй это:

SELECT tk.*,  COUNT(tp.id) 
FROM tbl_message tk
LEFT JOIN tbl_submessage tp
ON tp.post_id = tk.id
WHERE tk.society_id=3
GROUP BY tk.id

Получил желаемый результат.

Saket Mayank 07.05.2018 20:46

Другие вопросы по теме