У меня есть рейтинговая комиссия за лучшие первые 100 блогов для каждого пола Malees and Females.Запрос MySQL, чтобы получить лучшие звания из одной таблицы и UPDATE с результатами другой
У меня есть блог таблица:
PRIMARY
blogs_id users_id blogs_score blogs_score_time gender
1 11 2852 2015-09-09 05:21:51 m <-- same score but older date
2 23 2146 2015-09-10 07:31:54 m
3 23 2146 2015-09-10 07:32:26 m
4 23 2852 2015-09-10 04:42:15 m <-- same score but newer date
5 51 1793 2015-09-11 08:15:55 f
6 88 2947 2015-09-11 09:33:18 f
У меня есть пользователи таблица:
PRIMARY
id best_rank gender
11 0 m
23 0 m
51 0 f
88 0 f
Мне нужно COUNT лучших рядов (с помощью MAX (blogs_score) и MAX (blogs_score_time)) для каждого user from Таблица дневников и INSERT/UPDATE Таблица пользователей с лучшими рангами для первых 100 пользователей каждого пола с самыми высокими рангами, поэтому результат должен быть:
PRIMARY
id best_rank gender
11 2 m
23 1 m
51 2 f
88 1 f
Где пользователь id 11 имеет лучший ранг 2, потому что идентификатор пользователя 11 имеет тот же результат с пользователем 23, но старше даты, чем пользователь 23. Где пользователь 51 имеет рейтинг 2 из-за женской группы. Я добавил колонку blogs_score_time
, чтобы предотвратить ранжирование рейтинга. И дата 2015-09-10 означает 10 сентября
Конечная идея состоит в том, чтобы показать положение ранг в профиле пользователя и один раз кто-то проголосовал (blogs_score
изменения в таблице блогов), в best_rank
столбец в таблице users
должны обновляться с пересчетом новых рангов для ВСЕ 100 пользователей, которые имеют лучшие звания, в частности, гендерную группу.
Как адаптировать и исправить этот (нерабочий) запрос к моим потребностям?
$sql->query("UPDATE users
JOIN (SELECT b.users_id,
@curRank := @curRank + 1 AS rank,
MAX(blogs_score), MAX(blogs_score_time)
FROM blogs b
JOIN (SELECT @curRank := 0) r
ORDER BY b.blogs_score DESC, p.blogs_score_time DESC LIMIT 100
) ranks ON (ranks.users_id = users.id)
SET users.best_rank = ranks.rank");
Или, как адаптировать и исправить это (не работает) запрос
$sql->query("INSERT INTO users (best_rank, id)
SELECT @rank := @rank + 1 AS rank, b.users_id
FROM blogs b
LEFT JOIN users u ON b.users_id = u.id
GROUP BY b.users_id, b.blogs_score, b.blogs_score_time, b.gender
ORDER BY b.blogs_score DESC, b.blogs_score_time DESC
ON DUPLICATE KEY UPDATE best_rank = VALUES(rank)");
Пожалуйста, помогите мне с запросом, чтобы решить эту проблему. Я не нашел подобного решения в stackoverflow, и мне кажется очень сложным написать такой запрос.
Большое спасибо!
Идеальное решение !!! Спасибо огромное! – oxyd