Нужно одним запросом получить данные из таблицы posts и post_likes. При этом данных в post_likes может не быть. Без использования JOIN отображаются только те записи где есть post_likes, с использованием JOIN пишет not unique table/alias.
Структура post_likes:
CREATE TABLE post_likes (
postId INT UNSIGNED NOT NULL, /*postId - id поста*/
userId INT UNSIGNED NOT NULL, /*userId - id пользователя*/
UNIQUE KEY(postId, userId) /*сочетание postId, userId должно быть уникальным*/
);
Запрос:
SELECT posts.id, posts.userId, COUNT(post_likes.postId)
FROM posts, post_likes
LEFT JOIN posts ON posts.id = post_likes.postId
WHERE posts.id = post_likes.postId
GROUP BY posts.id;
Помогите изменить запрос чтоб он корректно работал.
Для правильного вопроса надо знать половину ответа
SELECT `p`.`id`, `p`.`userId`, IFNULL(`c`.`count`, 0)
FROM `posts` AS `p`
LEFT JOIN (
SELECT `postId`, COUNT(*) AS `count`
FROM `post_likes`
GROUP BY `postId`
) AS `c` ON `c`.`postId` = `p`.`id`
Вы к лайкам делаете LEFT JOIN постов?) По логике у поста может не быть лайков, поэтому нужно к постам делать LEFT JOIN лайков. И зачем вы в WHERE дублируете условие по которому уже сделали JOIN?
Вам, молодой человек, потратить бы 15 минут на прочтение хотя бы одной статьи про JOIN в РБД, гораздо полезнее было бы, чем на тостере вопросы писать.