2013-05-10 3 views
0

Я получил этот запросПолучить все КУДА случаи в одном запросе

SELECT users.name 
FROM users 
LEFT JOIN weapon_stats ON users.id = weapon_stats.zp_id 
WHERE weapon_stats.weapon = 26 
ORDER BY weapon_stats.kills DESC 
LIMIT 1; 

Проблема это то, что у нужно, чтобы получить результаты изменения, где от 1 до 30, то будет нечетным ..

Можно получить все результаты в одном запросе?

Я хочу, чтобы каждый пользователь с наибольшим количеством убийств с каждым оружием

оружия 1

SELECT users.name 
FROM users 
LEFT JOIN weapon_stats ON users.id = weapon_stats.zp_id 
WHERE weapon_stats.weapon = 01 
ORDER BY weapon_stats.kills DESC 
LIMIT 1; 

оружие 2

SELECT users.name 
FROM users 
LEFT JOIN weapon_stats ON users.id = weapon_stats.zp_id 
WHERE weapon_stats.weapon = 02 
ORDER BY weapon_stats.kills DESC 
LIMIT 1; 

Спасибо заранее!

ответ

1
select U.name, W.weapon, W.kills 
FROM users U 
INNER JOIN weapons W on W.zp_id = U.id 
INNER JOIN 
    (SELECT WW.weapon, MAX(WW.kills) AS kills 
    FROM weapons WW 
    WHERE WW.weapon BETWEEN 1 AND 30 
    GROUP BY WW.weapon) K 
    ON W.kills = K.kills AND W.weapon = K.weapon 

Я уверен, что это можно сделать быстрее за счет оптимизации, но это в конечном итоге работает

jsfiddle link

+0

Мне нужно получить результаты каждого запроса, от значения 0 до 1. Я не хочу, чтобы сделать 30 queryes (WHERE weapon_stats.weapon = 1, где weapon_stats.weapon = 2, ГДЕ weapon_stats.weapon = 3) и т. Д. – Zuker

+0

'WHERE weapon_stats.weapon между 1 и 30' также работает – Bert

+0

ммм, проверьте мое редактирование, я думаю, теперь вы можете это понять! – Zuker

0

Если я не уверен, непонимание того, что вы ищете, не может выполнить следующие действия?

SELECT users.name 
FROM users 
LEFT JOIN weapon_stats ON users.id = weapon_stats.zp_id 
WHERE weapon_stats.weapon BETWEEN 1 and 30 
ORDER BY weapon_stats.kills DESC 
LIMIT 1; 
Смежные вопросы