Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / как лучше всего вытащить html таблицы из функции? / 5 сообщений из 5, страница 1 из 1
30.05.2018, 19:45
    #39652802
tip78
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как лучше всего вытащить html таблицы из функции?
обычно генерю таблицы в ПХП, а вот теперь хочу внутри БД )

вот такая ф-я:
Код: sql
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.
31.
32.
33.
34.
35.
36.
37.
CREATE OR REPLACE FUNCTION func()
LANGUAGE SQL AS $$

WITH sub AS (SELECT
...тут всякие агрегаты и CASE-ы...
)

-- а дальше пытаюсь генерить саму таблицу:
SELECT
concat('<tr>
<td>', name3, '</td>
<td>', total1, '</td>
<td>', total7, '</td>
<td>', total30, '</td>
<td>', total_week, '</td>
<td>', total_month, '</td>
<td>', total_q, '</td>\n',
(CASE WHEN active IS NOT NULL THEN '<td class=''bg15''>' || active || '</td>' ELSE '<td></td>' END), -- вставить класс
'\n</tr>'
) -- concat
FROM sub

UNION ALL
SELECT concat(
'<tr class=''total''>
<td>ИТОГО:</td>
<td>', sum(total1), '</td>
<td>', sum(total7), '</td>
<td>', sum(total30), '</td>
<td>', sum(total_week), '</td>
<td>', sum(total_month), '</td>
<td>', sum(total_q), '</td>
<td>', sum(total_active), '</td>
</tr>')
FROM sub;

$$;



но так он выводит всего 1 строчку
и как бы я не крутился вокруг UNION, там 1 строчка и всё. Ну потому что надо единым текстом выводить всю таблицу.
поэтому я пытался через array_agg() + array_to_string(), но там путаница наступает при отсутствии UNION ALL
видимо надо как-то пихать в переменные, но как?
а может ещё как-то оптимально?
...
Рейтинг: 0 / 0
31.05.2018, 12:01
    #39653148
tip78
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как лучше всего вытащить html таблицы из функции?
уже разобрался
...
Рейтинг: 0 / 0
31.05.2018, 21:44
    #39653610
tip78
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как лучше всего вытащить html таблицы из функции?
что примечательно, ф-я отдаёт html за 3ms, но если прописать IMMUTABLE, то за 0.02ms (!!), т.е. в 150 раз быстрее
но я не могу использовать IMMUTABLE, если в таблицах происходят изменения, так?
...
Рейтинг: 0 / 0
01.06.2018, 11:39
    #39653842
tip78
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как лучше всего вытащить html таблицы из функции?
неужели никто не знает?
про IMMUTABLE вот что пишут:
авторIMMUTABLE можно ставить если значение зависит только от аргумента, а не от данных БД. Она сама не будет выполнять никаких запросов в БД.
Она выполняется вообще один раз как только вычислен параметр, а если он не зависит от данных БД, то вообще посчитается на этапе планирования запроса.
но я проверял - удалял из таблицы строку и ф-я это учла тут же
...
Рейтинг: 0 / 0
01.06.2018, 13:06
    #39653933
vyegorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как лучше всего вытащить html таблицы из функции?
tip78,

А вы напишите запрос где такая функция используется несколько раз.
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / как лучше всего вытащить html таблицы из функции? / 5 сообщений из 5, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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