powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Хранимая процедура для грида с пэйджинацией и сортировкой
2 сообщений из 2, страница 1 из 1
Хранимая процедура для грида с пэйджинацией и сортировкой
    #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
Хранимая процедура для грида с пэйджинацией и сортировкой
    #38574880
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dstrelkowskyНо мне не нравятся примененные костыли (а именно оборачивание запроса в текстовую переменную с использованием конкатенации для сортировки).Ничего особо страшного тут нет, главное контролировать входные значения либо внутри процедуры, либо снаружи. Иначе может прилететь все, что угодно, вплоть до SQL-инъекции.
Если значения контролировать внутри процедуры, то можно их передавать, например, числами и декодировать CASE-ом.

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


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