2014-01-17 2 views
-1

Я пытаюсь оптимизировать этот запрос ниже, чтобы сделать его более эффективным и остановить медленную загрузку. Может кто-нибудь, пожалуйста, покажите мне, что мне нужно делать, чтобы оптимизировать это для будущих ссылок.Оптимизация MySQL-запроса с подзапросами в нем

SELECT * , username AS user, 
(SELECT COUNT(*) FROM pvp WHERE killer = user) AS kills, 
(SELECT COUNT(*) FROM pvp WHERE username = user) AS deaths, 
ROUND(kills/deaths, 2) AS kd FROM stats WHERE username = "Username" 
+0

Если у вас есть убивает и смертей в статистике, почему получить данные из ПвП? –

+0

Я не? Он не говорит, что это так. Прочтите его снова, чувак. – user3205106

+0

'ROUND (убивает/убивает, 2) AS kd FROM stats' –

ответ

0

Попробуйте это

SELECT username AS user, sum(kills) kills,sum(deaths) deaths FROM  
(
select (SELECT CASE WHEN killer = user THEN 1 ELSE 0 END kills, 
    CASE WHEN username = user THEN 1 ELSE 0 END deaths from pvp), 
    ROUND(kills/deaths, 2) AS kd FROM stats 
) a 
GROUP BY username 
+0

Неправильный синтаксис. Спасибо, что попробовали. – user3205106

+0

Я забыл добавить select во внутренний запрос, попробуйте один раз и дайте мне знать. У меня нет табличной структуры, поэтому я не могу запустить запрос. – Krishna

+0

он говорит 'Неизвестный столбец 'пользователь' в 'полевом списке' – user3205106

1
select *,pvptable.username As user,COUNT(pvptable.killer) as kills, 
COUNT(pvptable.username) as deaths, 
ROUND(COUNT(pvptable.killer)/COUNT(pvptable.username), 2) AS kd FROM stats as st 
LEFT JOIN pvp as pvptable ON pvptable.killer='user' 
AND pvptable.username='user' WHERE st.username="Username"; 
+0

Я получаю эту ошибку 'У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с «LEFT JOIN pvp as pvptable ON pvptable.killer = user AND pvptable.username = user LE» в строке 4' – user3205106

+0

Нет, он не решен. Я получаю сообщение об ошибке «У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с «LEFT JOIN pvp as pvptable ON pvptable.killer =« jackfrost »AND pvptable.username = 'в строке 4' – user3205106

+0

Я изменил код на' select * , username Как пользователь, COUNT (pvptable.killer) as убивает, COUNT (pvptable.username) как смертей, ROUND (COUNT (pvptable.killer)/COUNT (pvptable.username), 2) AS kd FROM stats LEFT JOIN pvp as pvptable ON pvptable.killer = 'user' И pvptable.username = 'user' LEFT JOIN stats as sc ON sc.username = "Username" ', потому что вы не добавляли« FROM stats »перед левым соединением. Просто тестировал его idk, если это правильно или нет, но теперь я получаю ошибку follwing 'Column 'username' в списке полей неоднозначно' – user3205106

Смежные вопросы