Я немного новый для SQL, и я не могу найти решение своей проблемы. У меня две таблицы. В таблице A я храню много комментариев, каждый из которых имеет уникальный идентификатор.
В таблице B я сохраняю каждое голосование (например = 1 и не нравится = 0) для каждого комментария с датой. Будет запись для каждого голосования, поэтому для каждого комментария в таблице A. будет множество строк.
Мне нужно получить все комментарии и отсортировать их так, чтобы еженедельные наиболее понравившиеся комментарии были наверху, но я не уверен, как это сделать.
Вот что я до сих пор, но не знаю, как продолжить:
SELECT * FROM comment INNER JOIN logs ON comment.c_id=logs.c_id WHERE logs.daterate >= DATE_SUB(CURDATE(), INTERVAL 8 DAY) AND logs.rated=1
Чтобы уточнить, мне нужно получить все записи из журналов с оценкой = 1 на прошлой неделе и отсортировать их по наиболее частому c_id в порядке убывания и получить отдельную c_id для каждой строки … если это имеет смысл
Пожалуйста, задавайте вопросы, если я не проясню, спасибо!
SELECT * FROM comment INNER JOIN (SELECT comment.c_id, COUNT(*) AS cnt FROM comment INNER JOIN logs ON comment.c_id=logs.c_id WHERE logs.daterate >= DATE_SUB(CURDATE(), INTERVAL 8 DAY) AND logs.rated=1 GROUP BY comment.c_id) x ON x.c_id = comment.c_id ORDER BY x.cnt DESC
Попробуй это –
Сначала я запросил все записи из таблицы журналов, которые оцениваются 1 и составляют от 7 дней с текущей даты, а также упорядочиваются на основе количества c_id. Затем присоединился к ней с помощью таблицы COmments.
SELECT Comment.* FROM comment C INNER JOIN (SELECT logs.c_id as c_id,count(logs.c_id) as logcount FROM logs WHERE logs.rated=1 AND logs.daterate BETWEEN GETDATE() AND DATEADD(day,-7,getdate()) Group by logs.c_id order by count(logs.c_id) desc) X ON C.c_id = X.c_id ORDER BY X.logcount DESC