SQl Подсчет строк с двумя условиями при соединении

У меня есть следующие две таблицы:

Комментарии

comment_post_IDcomment_type
1курс_статус
2курс_статус

постмета

мета_ключмета_значение
урок_курс1
урок_курс1
урок_курс2

Результат должен выглядеть так:

Array
(
    [0] => stdClass Object
        (
            [comment_post_ID] => 1
            [lessoncount] => 1
        )

    [1] => stdClass Object
        (
            [comment_post_ID] => 1
            [lessoncount] => 2
        )

И вот где я до сих пор

SELECT
c.comment_post_ID,
C.lessoncount

FROM comments c

INNER JOIN (SELECT meta_value, count(meta_value) as lessoncount
FROM  postmeta WHERE meta_key='lesson_course') C 

WHERE c.comment_type = 'course_status'

Проблема в том, что я все еще получаю один и тот же урок для каждого результата. Я пробовал так много вещей, но я не понимаю... Мы очень ценим любую помощь!

Вам не хватает GROUP BY meta_value в подзапросе. И вам не хватает ON c.comment_post_id = C.meta_value в jOIN.

Barmar 05.05.2022 22:51
Освоение архитектуры микросервисов с 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
1
29
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Вы не группируете счетчики, поэтому получаете общее количество всех lesson_course строк в postmeta.

И у вас нет условия соединения между двумя таблицами, поэтому вы получаете полное перекрестное произведение.

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

SELECT c.comment_post_id, COUNT(*) AS lessoncount
FROM comments AS c
JOIN postmeta AS m ON c.comment_post_id = m.meta_value
WHERE c.comment_type = 'course_status'
AND m.meta_key = 'lesson_course'
GROUP BY c.comment_post_id

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