python не большая помощь

dr-ef

Создатель
Регистрация
2 Июл 2011
Сообщения
35
Реакции
13
Кто может помочь немного подкоректировать...Надо поправить такой код

c.execute("(SELECT DISTINCT address FROM "+table+" WHERE game = 'cs16' AND type = 1 AND date_endtop > unix_timestamp(now()) ORDER BY date_end DESC) UNION (SELECT DISTINCT address FROM "+table+" WHERE game = 'cs16' AND type = 1 AND date_endvip > unix_timestamp(now()) ORDER BY date_end DESC) UNION (SELECT DISTINCT address FROM "+table+" WHERE game = 'cs16' AND boost = 1 AND rounds >= 1 ORDER BY date_addboost DESC)")

Что надо доделать , к date_endtop добавить num_top. В колонке num_top идут значения 1,2,3,4,5 и т.д. надо чтобы выводило в том порядке в каком указано в num_top.
Надеюсь смог обьяснить)
 
думаю нужно пост в другую тему. тут больше по sql, а не питону.
а если нужно сортировать в питоне то я обычно лупы делаю... если конечно не планируется тысячи записей для тясячей юзеров сортировать... а если нужно, то можно вариацию кэширования результата можно использовать..
 
Переформатировал тело запроса для наглядности:
(SELECT DISTINCT address FROM "+table+" WHERE game = 'cs16' AND type = 1 AND date_endtop > unix_timestamp(now()) ORDER BY date_end DESC)
UNION
(SELECT DISTINCT address FROM "+table+" WHERE game = 'cs16' AND type = 1 AND date_endvip > unix_timestamp(now()) ORDER BY date_end DESC)
UNION
(SELECT DISTINCT address FROM "+table+" WHERE game = 'cs16' AND boost = 1 AND rounds >= 1 ORDER BY date_addboost DESC)

Итак, у нас выводится поле address по 3 различным фильтрам, date_endtop присутствует только в первом запросе.
После объединения внутренние сортировки (по date_end и date_addboost), скорее всего, слетят. Если ими можно пренебречь, то можно переписать запрос, например, вот так:

(SELECT DISTINCT address FROM "+table+" WHERE game = 'cs16' AND type = 1 AND date_endtop > unix_timestamp(now())) UNION
(SELECT DISTINCT address FROM "+table+" WHERE game = 'cs16' AND type = 1 AND date_endvip > unix_timestamp(now())) UNION
(SELECT DISTINCT address FROM "+table+" WHERE game = 'cs16' AND boost = 1 AND rounds >= 1)

Затем так:

SELECT DISTINCT address FROM "+table+" WHERE game = 'cs16'
AND (
(type = 1 AND date_endtop > unix_timestamp(now())) OR
(
type = 1 AND date_endvip > unix_timestamp(now())) OR
(boost = 1 AND rounds >= 1)
)

В оставшемся запросе теперь можно добавить упорядочивание по колонке num_top:

SELECT DISTINCT address FROM "+table+" WHERE game = 'cs16'
AND (
(type = 1 AND date_endtop > unix_timestamp(now())) OR
(
type = 1 AND date_endvip > unix_timestamp(now())) OR
(boost = 1 AND rounds >= 1)
)
ORDER BY num_top

Это приблизительно похоже на то, что требуется в задаче?
 
Назад
Сверху