Я пытаюсь создать запрос mysql, который оценивает бойцов MMA на основе их оценки, и независимо от того, являются ли они профессиональными и их весовым классом, вместе создавая подразделение бойцов. У меня есть таблица со всеми бойцами, которые содержат их вес, статус (профессиональный или любительский) и кучу других колонок. У меня также есть таблица, которая содержит оценки, которые рассчитываются из всех их боев. Записи должны быть заказаны как разделение и счет, но я могу получить только мой запрос по заказу подразделения:MySQL порядок, не работая с соединением
INSERT INTO fa_rankings (fighter_id, rank, division)
SELECT
fa_scores.fighter_id,
@r := CASE WHEN @div <> f_division THEN 1 ELSE @r+1 END as f_rank,
@div := f_division
FROM
(SELECT @div := NULL) d,
(SELECT @r := 0) r,
fa_scores
JOIN (SELECT fa_fighters.fighter_id,
CONCAT(
IF(status = 'professional', 'a', 'b'),
CASE
WHEN weight < 126 THEN 0
WHEN weight BETWEEN 126 AND 135 THEN 1
WHEN weight BETWEEN 136 AND 145 THEN 2
WHEN weight BETWEEN 146 AND 155 THEN 3
WHEN weight BETWEEN 156 AND 170 THEN 4
WHEN weight BETWEEN 171 AND 185 THEN 5
WHEN weight BETWEEN 186 AND 205 THEN 6
WHEN weight BETWEEN 206 AND 265 THEN 7
ELSE 8 END) as f_division
FROM fa_fighters
ORDER BY f_division ASC) as fighters using (fighter_id)
ORDER BY score DESC
Я предполагаю, что это что-то делать с тем, где последний заказ на утверждения, но я не могу понять, куда еще его поместить, потому что в объединенном запросе он не работает. Сейчас этот запрос генерирует следующее:
Rankings Table Compared with Scores
+------------+------+----------+ +-------+
| fighter_id | rank | division | | score |
+------------+------+----------+ +-------+
| 131 | 1 | a1 | | 0 |
| 23 | 2 | a1 | | 34 |
| 332 | 3 | a1 | | 4 |
| 1233 | 1 | a2 | | 0 |
| 643 | 2 | a2 | | 44 |
+------------+------+----------+ +-------+
EDIT: Я был предыдущий запрос, который не использовал объединения, но только сгруппированы по ли или не был профессиональным борцом, и этот запрос сделал правильно применить ранжирование, поэтому я подозреваю, что у него есть что-то с этим соединением.
EDIT: Вот результат моего выбора
SELECT * ,
(SELECT CONCAT_WS( ' ', f_name, l_name) FROM fa_fighters WHERE fa_fighters.fighter_id = fa_rankings.fighter_id)
AS name,
(SELECT score FROM fa_scores WHERE fa_scores.fighter_id = fa_rankings.fighter_id)
AS score
FROM `fa_rankings`
WHERE 1
ORDER BY division, rank ASC
LIMIT 0 , 30
EDIT: Это упорядочение записей по счету, но не в той точке; он упорядочивает их по счету после определения ранга, так что исходная таблица упорядочивается по результату, но у бойцов нет правильного ранга, связанного с ними. Мне нужен запрос, чтобы заказать записи по счету, прежде чем он запустит счетчик ранга и определит рейтинг каждого бойца. Это проблема, когда ORDER BY выполняется при выполнении запроса, я просто не знаю, где его поставить.
Удалить Сортировать по Внутреннему из дивизия запроса и поместить в внешнем запросе .. –
я имел его в внешний запрос, но он не сработал, он не упорядочивался делением, EDIT, он дал бы всем бойцам рейтинг 1 или 2 –