MySQL inner join 3 таблицы

148
27 марта 2019, 21:10

У меня есть таблиц с данными о фотографии, таблица с списком лайков от различных пользователей ко всем фотографиям и таблица с комментариями к фотографиям. Мне нужно вывести количество лайков и комментариев к последним 12 фотографиям. Проблема состоит в том что при склейке 3х таблиц количество комментариев и лайков возводится в квадрат

Структура таблиц

comments: id (PK A_I), photoId, userId, text

likes: id (PK A_I), photoId, userId

photos: photoId (PK A_I), name, path

Update: если я захочу добавить дислайки, для них лучше заводить аналогичную лайкам таблицу или добавить столбец (лайк/дислайк) ?

Update2:

SELECT * 
FROM `photos` 
RIGHT JOIN ( SELECT photoId, COUNT(photoId) as likesCount
            FROM likes
           GROUP BY photoId) as x
ON photos.photoId = x.photoID
RIGHT JOIN ( SELECT photoId, COUNT(photoId) as commentsCount
            FROM comments
           GROUP BY photoId) as y
ON photos.photoId = y.photoID
WHERE 1
Answer 1

Нужно было соединять таблицу в подзапросах. Так же использовать LEFT OUTER JOIN.

SELECT * 
FROM `photos` 
left OUTER JOIN ( SELECT photoId, COUNT(photoId) as likesCount
            FROM likes
           GROUP BY photoId) as x
ON photos.photoId = x.photoID
left OUTER JOIN ( SELECT photoId, COUNT(photoId) as commentsCount
            FROM comments
           GROUP BY photoId) as y
ON photos.photoId = y.photoID
READ ALSO
Как распределить полученный ответ PHP

Как распределить полученный ответ PHP

Есть константа $donate1, которая в итоге выдает STEAM_X:Y:Z, мне надо подсчитать за формулой через PHP Z*2+Y=W и отправить в БД запрос с W, если находит значение-...

151
Почему в php “lcfirst()” не работает для русских символов?

Почему в php “lcfirst()” не работает для русских символов?

lcfirst() не работает для русских символов

176
Подключение библиотеки GLPK к проекту Qt

Подключение библиотеки GLPK к проекту Qt

В своё время скачал и сделал make/install библиотеки GLPK, лежит это всё/Documents/Libraries/glpk

165
OpenALL С++ Запись и отдельно Проигрывание

OpenALL С++ Запись и отдельно Проигрывание

Пытаюсь научиться обрабатывать записанный с микрофона звук, нашёл пример, но там всё склеено, и непонятно что за что отвечает

165