Hat-Trick, Скорее всего, не правильно озвучена задача.
Дай дамп для теста, и скажи что тебе надо там конкретно получить.
select x.*
, f.*
from (
SELECT `id`,
`column1` + `column2` AS `c1`,
`column2` + `column3` AS `c2`,
`column3` + `column1` AS `c3`
FROM `table`
) x
JOIN `table` as `f`
ON
`f`.`id` = `x`.`id`
# desay (22.10.2020 / 21:13)Задача большая, но принцип работы такой
Hat-Trick, Скорее всего, не правильно озвучена задача.
Дай дамп для теста, и скажи что тебе надо там конкретно получить.
SELECT `x`.*,
(CASE
WHEN GREATEST(`x`.`защитник`, `x`.`полузащитник`, `x`.`нападающий`) = `защитник` THEN 'защитник'
WHEN GREATEST(`x`.`защитник`, `x`.`полузащитник`, `x`.`нападающий`) = `полузащитник` THEN 'полузащитник'
WHEN GREATEST(`x`.`защитник`, `x`.`полузащитник`, `x`.`нападающий`) = `нападающий` THEN 'нападающий'
END) as `позиция`
FROM (SELECT `ид`,
(`защита` + `отбор`) AS `защитник`,
(`полузащита` + `пас`) AS `полузащитник`,
(`нападение` + `удар`) AS `нападающий`
FROM `игроки`
GROUP BY `ид`) as `x`
LEFT JOIN `игроки` as `f` ON (`f`.`ид` = `x`.`ид`)
# Hat-Trick (22.10.2020 / 23:23)Ну это ужасно долго на самом деле) А если этот запрос у тебя будет выполняться слишком часто, в каком нить нагруженном месте, то сервер не скажет спасибо тебе уже при 10-20 активных игроках)
Для таблицы в 100к строк и весом 60мб запрос выполняется 1-2 секунду. То есть 100к игрокам подбирается лучшая позиция за 1-2 секунды. Это, например, быстрее чем получить список 100к игроков, в цикле w