Я уже некоторое время изменяю запрос, читая множество постов на этом замечательном сайте, чтобы добраться до того места, где я до сих пор. Но, увы, теперь я застрял: (
Этот запрос и соответствующая часть базы данных, которую я разработал, похожи на систему комментариев на YouTube. Соответствующие таблицы и поля:
USRS
usr_id int (PK)
КОММЕНТАРИИ
comment_id int (PK)
usr_id int (FK) ссылается на usrs (usr_id)
topic_id int (FK) ссылки на темы (topic_id)
Descr Varchar
создал varchar
COMMENT_LIKERS
comment_id int (PK) (FK) ссылается на комментарии (comment_id)
usr_id int (PK) (FK) ссылается на usrs (usr_id)
liker tinyint
Я хочу иметь возможность выбрать все соответствующие данные в одном запросе. Помимо общих данных для каждого комментария, я хочу подсчитать все лайки и антипатии для каждого комментария. На данный момент у меня есть запрос на подсчет лайков для ВСЕХ комментариев, а не для каждого, хотя у меня есть ЛЕВОЕ СОЕДИНЕНИЕ с предложением ON: comments.comment_id = comment_likers.comment_id.
Я изучаю MySql и PHP, поэтому будьте спокойны со мной, если я сделал что-то глупое. Уверяю вас, я искал подсказки к ответу.
Вот запрос:
SELECT comments.comment_id, comments.descr, comments.created, usrs.usr_name,
COUNT(if(comment_likers.liker = 1, 1, null)),
COUNT(if(comment_likers.liker = 0, 1, null)),
comment_likers2.liker
FROM comments
INNER JOIN usrs ON ( comments.usr_id = usrs.usr_id )
LEFT JOIN comment_likers ON ( comments.comment_id = comment_likers.comment_id )
LEFT JOIN comment_likers AS comment_likers2 ON ( comments.comment_id = comment_likers.comment_id AND comment_likers.usr_id = $usrID )
WHERE comments.topic_id = $tpcID
GROUP BY comments.comment_id
ORDER BY comments.created DESC
Заранее спасибо