У меня есть следующие две таблицы:
Комментарии
comment_post_ID | comment_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'
Проблема в том, что я все еще получаю один и тот же урок для каждого результата. Я пробовал так много вещей, но я не понимаю... Мы очень ценим любую помощь!
Вы не группируете счетчики, поэтому получаете общее количество всех 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
Вам не хватает
GROUP BY meta_value
в подзапросе. И вам не хватаетON c.comment_post_id = C.meta_value
вjOIN
.