Hat-Trick, Скорее всего, не правильно озвучена задача.
Дай дамп для теста, и скажи что тебе надо там конкретно получить.
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
Simba, Я на PHP это делаю) Там где идет обновление навыка, если навык повысился на единицу, то пересчитываем позиции игроков и выбираем лучшую, записываем в базу. Короче миллисекунды. Это просто описание задачи простецкое и только ради интереса.
А вообще подзапрос не нужен. Просто вместо того, чтобы сравнивать алиасы из подзапроса, нужно сравнивать сами суммы навыков в GREATEST c суммой навыков для позиции и давать уже это значение. И тогда запрос для всей таблицы в 100к выполняется за 0,002 сек)). Только сам запрос выходит на полторы сотни строк.
Ну при работе с инт таймстампом математика на стороне пхп, при формате даты, на стороне мускула. Как по мне и то и то норм, дело привычки, кому то проще в бд, кому то в пыхе
Зачем нужны float и double если есть decimal?
Разная точность
Hat-Trick, decimal, на много медленнее, тогда как во многих случаях достаточно точности float/double.