powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как текст преобразовать в часть запроса?
25 сообщений из 29, страница 1 из 2
Как текст преобразовать в часть запроса?
    #38897465
Generalproger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, столкнулся с проблемой:
Есть таблица py в которой есть массив data который хранит идентификаторы строк другой таблицы. С помощью переборки через array_agg и еще пары приколов результат получатся что data: id = 3 OR id = 6 OR id = 9, попытался реализовать выборку так: WHERE py.data что естественно не получилось.
Как преобразовать тип text в такой тип что бы он выполнился как часть SQL запроса?
CAST(data AS query) естественно не прокатывает))))
...
Рейтинг: 0 / 0
Как текст преобразовать в часть запроса?
    #38897481
id in массив
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Generalproger,

Зачем было собирать в строку?
...
Рейтинг: 0 / 0
Как текст преобразовать в часть запроса?
    #38897489
Alex Marmuzevich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Как текст преобразовать в часть запроса?
    #38897507
Лопата
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GeneralprogerЗдравствуйте, столкнулся с проблемой:
Есть таблица py в которой есть массив data который хранит идентификаторы строк другой таблицы. С помощью переборки через array_agg и еще пары приколов результат получатся что data: id = 3 OR id = 6 OR id = 9, попытался реализовать выборку так: WHERE py.data что естественно не получилось.
Как преобразовать тип text в такой тип что бы он выполнился как часть SQL запроса?
CAST(data AS query) естественно не прокатывает))))
те чо надо ?

не надо рассказывать что пытаешься накрутить, не сказав сначала -- а для нафига.

если хочешь типа
Код: sql
1.
WHERE ARRAY[3,6,9] && py.data 

-- то никакой подстановки пошитой вручную поцами с малой арнаутовской строки не надо -- надо так и писать
...
Рейтинг: 0 / 0
Как текст преобразовать в часть запроса?
    #38897520
Alex MarmuzevichТипа такого?
http://stackoverflow.com/questions/7433201/are-there-any-way-to-execute-a-query-inside-the-string-value-like-eval-in-post осталось выяснить, что станется с переданными в строке переменными типа id.
...
Рейтинг: 0 / 0
Как текст преобразовать в часть запроса?
    #38897561
Generalproger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
лопата,

Смотрите, есть выборка из БД к примеру SELECT ARRAY[pole_data,pole_param,pole_special] поле data это массив идентификаторов по которым надо сделать выборку из другой БД, на других форумах сказали что так сделать невозможно силами простого sql и я решил пойти и сделать функцию на это дело, если уже обсуждать функцию то получается вот что:

CREATE OR REPLACE FUNCTION func_a( data text[] = '{}' )
RETURNS json AS $func$
BEGIN
константа qu = QUERY EXECUTE 'SELECT array_to_string(data, ' OR id = ');';
RETURN QUERY EXECUTE 'SELECT to_json(array_agg(to_json(ARRAY[array_to_json(keys),array_to_json(limiter)]))) FROM ah_py WHERE '+qu+' ;';

END
$func$ LANGUAGE plpgsql;

Жирным выделил то что не работает и я написал это что бы вы примерно поняли логику функции, т.е. должен входить массив к примеру {1,2,3,4} и потом разбираться запросом qu и добавляться в запрос ответ которого должна вернуть вся эта функция.
...
Рейтинг: 0 / 0
Как текст преобразовать в часть запроса?
    #38897569
Generalproger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alex Marmuzevich,
В целом это решает проблему, но раз уж использовать функции то решил провести все нужные операции внутри нее включая переборку data = {1,2,3} в формат id = 1 OR id = 2 OR id = 3 , и пара вопросов насчет функций - как внедрить переданную информацию в запрос и как использовать два запроса внутри функции, если не сложно то посмотрите мое сообщение выше, там я привел пример того что я пытаюсь сделать
...
Рейтинг: 0 / 0
Как текст преобразовать в часть запроса?
    #38897600
Лопата
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Generalprogerлопата,

Смотрите, есть выборка из БД к примеру SELECT ARRAY[pole_data,pole_param,pole_special] поле data это массив идентификаторов по которым надо сделать выборку из другой БД, на других форумах сказали что так сделать невозможно силами простого sql и я решил пойти и сделать функцию на это дело, если уже обсуждать функцию то получается вот что:

CREATE OR REPLACE FUNCTION func_a( data text[] = '{}' )
RETURNS json AS $func$
BEGIN
константа qu = QUERY EXECUTE 'SELECT array_to_string(data, ' OR id = ');';
RETURN QUERY EXECUTE 'SELECT to_json(array_agg(to_json(ARRAY[array_to_json(keys),array_to_json(limiter)]))) FROM ah_py WHERE '+qu+' ;';

END
$func$ LANGUAGE plpgsql;

Жирным выделил то что не работает и я написал это что бы вы примерно поняли логику функции, т.е. должен входить массив к примеру {1,2,3,4} и потом разбираться запросом qu и добавляться в запрос ответ которого должна вернуть вся эта функция.
если "другая беде", в которой вы утонули -- постгрес, то нахуа,хуа, простите мой французкий, парсить массив, чтобы в итоге написать эквивалент
Код: sql
1.
WHERE ARRAY[3,6,9] && py.data


или что-то сильно из той же оперы.

еще раз :
без забеганий, и рассказок про страшилки, и кусков своего безумия -- расскажите как стоит задача изначально, а не в вашем деформированном мире.

может быть вы хотите совсем что-то банальное, типа
Код: sql
1.
 WHERE id =ANY (data||ARRAY[1::INT,2,3,4])


но отсюда ж не видно, а у вас в голове -- туман

там, за туманами, вечЬными, пьяными... щас спаю
...
Рейтинг: 0 / 0
Как текст преобразовать в часть запроса?
    #38897632
Generalproger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
лопата,

Простите, а что вам не понятно?
Есть таблица ah_py в ней есть колонки
id, param:text[], data:text[], limiter:text[], special:text[], fin:text[]
Я сначала выбираю в формате JSON
SELECT to_json(array_agg(to_json(ARRAY[to_json(id), array_to_json(param), array_to_json(limiter), array_to_json(special), array_to_json(fin)]) ORDER BY id)) FROM ah_py WHERE param[3]=1;

И получаю нечто такое ответом:
[ [1,[...],[...],[...],[...] ,[] ], [2,[...],[...],[...],[...] ,[] ], [3,[...],[...],[...],[...] ,[] ],...]
Но тут еще дополнительно есть массив data в котором хранятся идентификаторы строк которые надо дополнительно засунуть в ответ, например в тот массив который выделен жирным, этих идентификаторов может быть как один, так и десять так что выбирать их оказалось сложновато.

Вообщем хочу реализовать нечто такое:
SELECT to_json(array_agg(to_json(ARRAY[to_json(id), array_to_json(param), array_to_json(limiter), array_to_json(special), array_to_json(fin), myfunc(data) ]) ORDER BY id)) FROM ah_py WHERE param[3]=1;

Где функция myfunc вернет допустим [[5, [...]], [37, [...]], [38, [...]],...]

P.S. Написал я конечно про таблицу, а не про другую базу, извиняюсь
...
Рейтинг: 0 / 0
Как текст преобразовать в часть запроса?
    #38897636
Лопата
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Generalproger,
низачод

ты этта, проспись, а завтра попробуй заново сформулировать
...
Рейтинг: 0 / 0
Как текст преобразовать в часть запроса?
    #38897642
Лопата
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
слюшай, а могабыть ты вот этава проста хочишь:
Код: sql
1.
array_to_json(fin||data)


тока сказть неможишь ?
нет ?

ти падумай, поспи, ещё падумай -- может быть речь и наладицца
...
Рейтинг: 0 / 0
Как текст преобразовать в часть запроса?
    #38897643
Generalproger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
лопата,

Дак как я понимаю помочь вы не можете?)
Меня в данный момент интересует две вполне простые вещи, как поставить константу в функциях и как ее потом встроить в запрос.

Насчет py.data я понимаю что сильно все напутал, просто в момент когда задавал вопрос я думал реализовать это вложенными запросами, а как теперь понял так не выйдет.

В принципе ситуация тут я так думаю для бывалых людей в таких страшных SQL извращениях простая, надо просто из переданного в функцию массива data содержащего несколько циферок составить часть SQL выражения и встроить эту часть в запрос, потом вернуть ответ этого запроса RETURN-ом функции.

В остальную часть этой запутанной инфраструктуры думаю вам лезть не обязательно т.к. вы просто запутаетесь.
...
Рейтинг: 0 / 0
Как текст преобразовать в часть запроса?
    #38897648
Лопата
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Generalproger,

слушай, дятел, это у тебя в голове мухи е@утся
и полная неспособность что-то внятное формулировать

т.ч. ограничь свои усилия своими проблемами -- попытайся внятно сформулировать задачу

а уж где я запутаюсь -- это не твоё , долбоклювье дело

не смочь написать строку для execute - это полная профнепригодность
но самое смешное, что сдаётся этого и не требуется
есть такая чуйка
...
Рейтинг: 0 / 0
Как текст преобразовать в часть запроса?
    #38897652
Generalproger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
лопата,

Я вот вашу функцию не понимаю,
array_to_json(fin||data)
Что она вообще вернуть то в данном случае должна?
...
Рейтинг: 0 / 0
Как текст преобразовать в часть запроса?
    #38897655
Generalproger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
лопата,

Извиняюсь, что вы так сердитесь?
Я просто реально не могу понять как вам объяснить задачу, функция должна вернуть не эквивалент массива а выборку по переданным идентификаторам из таблицы.
...
Рейтинг: 0 / 0
Как текст преобразовать в часть запроса?
    #38897659
Лопата
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Generalproger,
о, уже лучше
продолжайте пытаться сформулировать, и всё получится

1. что из 2. чего, по 3. какому условию отфильтрвать ?
только без домыслов, а битым словом



что касается предыдущего -- то это просто конкатенация массивов в обрамлении вашей любимой ф--ии

Код: sql
1.
2.
3.
SELECT array_to_json (ARRAy[1,2,3]) a_a 
,array_to_json (ARRAy[4,5,6]) a_b
,array_to_json (ARRAy[1,2,3]|| ARRAy[4,5,6]) AS "a_a||b"
...
Рейтинг: 0 / 0
Как текст преобразовать в часть запроса?
    #38897660
Generalproger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
лопата,

Из таблицы ah_py
Поля data, param (У них param[3]=2 поэтому они не попадают основной запрос, они являются наследниками выборки где param[3]=1)
Фильтровать по списку идентификаторов которые в data
...
Рейтинг: 0 / 0
Как текст преобразовать в часть запроса?
    #38897664
Лопата
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Generalprogerлопата,

Из таблицы ah_py
Поля data, param (У них param[3]=2 поэтому они не попадают основной запрос, они являются наследниками выборки где param[3]=1)
Фильтровать по списку идентификаторов которые в data
ну попробуем

Код: sql
1.
2.
3.
4.
SELECT 
data,param
 FROM ah_py
WHERE param[3]=2



и чо ? всё ?

или опять всё неверно сформулировано ?

что фильтровать ,куда фильтровать ?

вы в 3-х словах плутаете, а четвёртым куда-то прыгаете
...
Рейтинг: 0 / 0
Как текст преобразовать в часть запроса?
    #38897666
Generalproger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
лопата,

Основной запрос
SELECT data,param FROM ah_py WHERE param[3]=1
У него в data лежат идентификаторы нескольких строк этой же таблицы только у которых param[3] = 2.

В итоге надо нечто такое: SELECT (SELECT ARRAY[data, param] FROM ah_py WHERE id = data[0] OR id = data[1] ....) ,param FROM ah_py WHERE param[3]=1
...
Рейтинг: 0 / 0
Как текст преобразовать в часть запроса?
    #38897669
Лопата
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Generalprogerлопата,

Основной запрос
SELECT data,param FROM ah_py WHERE param[3]=1
У него в data лежат идентификаторы нескольких строк этой же таблицы только у которых param[3] = 2.

а строка с param[3]=1 -- она одна ?

Код: sql
1.
2.
SELECT * FROM ah_py WHERE param[3] = 2 AND id = ANY((
(SELECT data FROM ah_py WHERE param[3]=1 LIMIT 1))




GeneralprogerВ итоге надо нечто такое: SELECT (SELECT ARRAY[data, param] FROM ah_py WHERE id = data[0] OR id = data[1] ....) ,param FROM ah_py WHERE param[3]=1

опять скачем. вы не с кыев--града, часом ?
...
Рейтинг: 0 / 0
Как текст преобразовать в часть запроса?
    #38897670
Generalproger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
лопата,

Да прикол в том что надо то все это дело вместе одним ответом выйти))
Нет не с киева, а с Питера
...
Рейтинг: 0 / 0
Как текст преобразовать в часть запроса?
    #38897671
Лопата
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Generalprogerлопата,

Да прикол в том что надо то все это дело вместе одним ответом выйти))
Нет не с киева, а с Питера
прикол пока в том, что вы не в состоянии ни на какой мове законченно сформулировать проблему. Поэтому арсеналы стоят не стрелянные. А дата - не выбранные.

вам наверное забыли рассказать -- что формулировка задачи -- это 90 %% её решения.

а что в питере уже скачут ? типа -- в пику клятым москалям ?
...
Рейтинг: 0 / 0
Как текст преобразовать в часть запроса?
    #38897672
Generalproger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
лопата,

Эх я вам значит объяснить никак не смогу :(
Все-таки если можете просто расскажите по поводу той функции что я скидывал
...
Рейтинг: 0 / 0
Как текст преобразовать в часть запроса?
    #38897673
Лопата
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Generalprogerлопата,

Эх я вам значит объяснить никак не смогу :(
Все-таки если можете просто расскажите по поводу той функции что я скидывал
таки ищете кривую лехкую дорожку ?

RTFM, однако

Код: sql
1.
2.
3.
4.
5.
6.
7.
DECLARE
  v_where CONSTANT text:='id='|| array_to_string(data, ' OR id = ') ;
BEGIN
   ...
   RETERN QUERY
       EXECUTE v_sql || COALESCE ('WHERE '|| v_where,'');
...



хотя вот это вот всё -- это просто :
Код: sql
1.
 SELECT ... WHERE id = ANY(data) 

--т.ч. "на колу мочало, начинай сначала"

не напомните, кто там после кшатриев идёт ? какую касту питерасты уже в православные кодеры призвали ?
...
Рейтинг: 0 / 0
Как текст преобразовать в часть запроса?
    #38897676
Generalproger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
лопата,

А допустим id = ANY({3,7,8}) будет равноценно id = 3 OR id = 7 OR id = 8
...
Рейтинг: 0 / 0
25 сообщений из 29, страница 1 из 2
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как текст преобразовать в часть запроса?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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