Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Хранимая процедура для грида с пэйджинацией и сортировкой / 2 сообщений из 2, страница 1 из 1
28.02.2014, 01:48:30
    #38574863
dstrelkowsky
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимая процедура для грида с пэйджинацией и сортировкой
Здравствуйте.
Подскажите пожалуйста как изменить процедуру, чтобы код стал красивее.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
CREATE PROCEDURE getPublisherReport (IN `start_date` DATE, IN `end_date` DATE, IN `pager_offset` INT, IN `pager_limit` INT, IN `sort` VARCHAR(255), IN `direction` CHAR(4))
  BEGIN
    SET @START_DATE = `start_date`;
    SET @END_DATE = `end_date`;
    SET @OFFSET = `pager_offset`;
    SET @LIMIT = `pager_limit`;

    SET @sql = CONCAT("
      SELECT
        publisher_name,
        publisher_id,
        SUM(impressions) as impressions,
        SUM(page_views) as page_views,
        SUM(pvs_ads) as pvs_ads,
        SUM(clicks) as clicks,
        SUM(clicks)/SUM(page_views)*100 as ctr,
        SUM(revenue)/100/SUM(clicks) as ecpc,
        SUM(revenue)/100/SUM(pvs_ads)*1000 as rpm,
        SUM(revenue)/100 as revenue,
        SUM(cost)/100 as cost,
        (SUM(revenue)-SUM(cost))/100 as profit
      FROM publisher_reports
      WHERE date >= ? AND date <= ?
      GROUP BY publisher_id
      ORDER BY ", sort," ",direction,"
      LIMIT ?, ?");

    PREPARE STMT FROM @sql;
    EXECUTE STMT USING @START_DATE, @END_DATE, @OFFSET, @LIMIT;
  END//



В проекте имеется ряд подобных процедур (написанных мной).Но мне не нравятся примененные костыли (а именно оборачивание запроса в текстовую переменную с использованием конкатенации для сортировки). Что бы вы изменили в этой процедуре?
PS: прошу прощения на этот вопрос. В базах данных (в mysql в частности) я не силен.
...
Рейтинг: 0 / 0
28.02.2014, 02:33:03
    #38574880
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимая процедура для грида с пэйджинацией и сортировкой
dstrelkowskyНо мне не нравятся примененные костыли (а именно оборачивание запроса в текстовую переменную с использованием конкатенации для сортировки).Ничего особо страшного тут нет, главное контролировать входные значения либо внутри процедуры, либо снаружи. Иначе может прилететь все, что угодно, вплоть до SQL-инъекции.
Если значения контролировать внутри процедуры, то можно их передавать, например, числами и декодировать CASE-ом.

Теоретически можно этот CASE и внутрь запроса запихнуть (тогда отпадет надобность в PREPARE/EXECUTE), но тогда это убьет все шансы на применение индекса для сортировки. Впрочем, конкретно в этом запросе этих шансов все равно нет, так что можно попробовать.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Хранимая процедура для грида с пэйджинацией и сортировкой / 2 сообщений из 2, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]