Так что я искал везде для этого, но я не могу найти это конкретное отношение. Следующий запрос возвращает все сообщения от пользователя и количество людей, которым понравилась почта, потому что я использовал GROUP BY postid
, что означает, что если результат повторяется, но имеет тот же postid
, то они сгруппированы.MYSQL получить все сгруппированные результаты один запрос с подсчетом строк
SELECT posts.id postid,posts.post_body,posts.post_type, ALLUSERS.USERNAME,
likes.liker,likes.target,
plikers.*,
COUNT(posts.id) numberOflikes
FROM posts
INNER JOIN ALLUSERS ON(ALLUSERS.USERID=posts.FROM_userid)
LEFT JOIN likes ON(likes.target=posts.id)
LEFT JOIN(SELECT USERID pl_id FROM ALLUSERS)plikers ON(pl_id=likes.liker)
GROUP BY postid
И результат ...
+--------+-----------------+------------------------+-----------+-------+--------+-------+-----------+---------------+
| postid | post_body | post_type | USERNAME | liker | target | pl_id | pl_un | numberOflikes |
+--------+-----------------+------------------------+-----------+-------+--------+-------+-----------+---------------+
| 83 | Southgate | 20&&03 Saturday/04:05 | Superuser | NULL | NULL | NULL | NULL | 1 |
| 84 | Great post! | 10&&03 Saturday/04:07 | Superuser | 4 | 84 | 4 | dennisrec | 7 |
| 85 | How delightful? | 10&&03 Saturday/04:07 | Superuser | 43 | 85 | 43 | zerCon | 1 |
| 87 | Cheers... | 10&&07 Wednesday/01:53 | Superuser | NULL | NULL | NULL | NULL | 1 |
| 88 | check this out! | 20&&07 Wednesday/03:31 | Superuser | NULL | NULL | NULL | NULL | 1 |
+--------+-----------------+------------------------+-----------+-------+--------+-------+-----------+---------------+
Который является правильным, но это возвращает только первый результат сгруппированных. Итак, квест стоит, есть ли способ все результаты всех групп в одном запросе?
Теперь ясно я мог бы просто удалить GROUP BY
и count(*)
фраза затем get multiple duplicate results
затем фильтровать их, чтобы получить все детали likers
поста, но это, безусловно, замедлить мои серверы вниз. Поэтому я уже пробовал это.
Любая помощь будет очень признательна.
Вы можете использовать 'GROUP_CONCAT (любит. Liker) .. '. Но способность «GROUP_CONCAT» должна быть скорректирована, если ваш размер данных растет. – 1000111
Ваш текущий запрос не имеет смысла, потому что вы выбираете неагрегатные столбцы с 'GROUP BY'. –
@TimBiegeleisen это имеет смысл, и я получаю результаты, затронутые «GROUP BY», но он группирует все и выбирает первый результат каждой группы, и если я удалю его, он возвращает все результаты, но с повторяющимися строками, которые совпадали, но я просто хотел захватите только поле userid из таблицы likers. что так трудно понять? – Dennisrec