комплексный ранг MySQL! - PullRequest
       12

комплексный ранг MySQL!

0 голосов
/ 21 апреля 2010

У меня есть таблица с этими столбцами: win, los, id ...

Я хочу заказать стол по этому индексу: выигрыш / (выигрыш + проигрыш) * 30 + выигрыш / сумма (выигрыш) * 70 а затем найти ранг для двух идентификаторов. Я не очень хорош в MySQL, поэтому то, что я написал, совершенно неверно. (Используется Perl + DBI + DBD :: mysql):

$stmt=$con->prepare("SET @rk := 0");
$stmt=$con->prepare("SELECT rank, id FROM (
                           SELECT @rk := @rk + 1 AS rank,                
                                (win/(win+los)*30+win/SUM(win)*70) AS index,
                                win, los, id 
                          FROM tb_name ORDER BY index DESC) as result 
                   WHERE id=? AND id=?"); 
$stmt -> bind_param ("ii", $id1, $id2);
$stmt -> execute();
$stmt -> bind_result($rk, $idRk); 

А также этот запрос, который предполагается запускать, возможно, каждые 5-10 секунд для каждого пользователя, поэтому я пытаюсь найти что-то очень, очень быстрое. При необходимости я мог бы добавить, изменить, удалить любой столбец, чтобы быть максимально быстрым.

Ответы [ 2 ]

1 голос
/ 21 апреля 2010

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

SELECT rank, id FROM (
    SELECT @rk := @rk + 1 AS rank,                
    (win/(win+los)*30+win/win_sum*70) AS index, -- SUM(win) -> win_sum
    win, los, id 
    FROM tb_name,
    (SELECT SUM(win) as win_sum FROM tb_name) as ws -- separated SUM(win)
    ORDER BY index DESC) as result
WHERE id IN (?, ?);    -- id=? AND id=? will never happen, should be OR

Может быть полезен составной индекс для ('win', 'los').

0 голосов
/ 21 апреля 2010

Какое бы выражение вы не использовали в операторе SELECT, оно также может входить в выражение ORDER BY.

Вы также можете назначить выражение псевдоним столбца и порядок, как вы сделали.

Если вас не устраивает mysql, тогда я предлагаю вам разработать свой запрос самостоятельно, а не пытаться одновременно встроить его в подготовленное утверждение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...