
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
06.03.2015, 16:55
|
|||
|---|---|---|---|
|
|||
Как текст преобразовать в часть запроса? |
|||
|
#18+
Здравствуйте, столкнулся с проблемой: Есть таблица py в которой есть массив data который хранит идентификаторы строк другой таблицы. С помощью переборки через array_agg и еще пары приколов результат получатся что data: id = 3 OR id = 6 OR id = 9, попытался реализовать выборку так: WHERE py.data что естественно не получилось. Как преобразовать тип text в такой тип что бы он выполнился как часть SQL запроса? CAST(data AS query) естественно не прокатывает)))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
06.03.2015, 17:17
|
|||
|---|---|---|---|
|
|||
Как текст преобразовать в часть запроса? |
|||
|
#18+
Generalproger, Зачем было собирать в строку? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
06.03.2015, 17:24
|
|||
|---|---|---|---|
|
|||
Как текст преобразовать в часть запроса? |
|||
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
06.03.2015, 17:46
|
|||
|---|---|---|---|
Как текст преобразовать в часть запроса? |
|||
|
#18+
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. -- то никакой подстановки пошитой вручную поцами с малой арнаутовской строки не надо -- надо так и писать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
06.03.2015, 18:04
|
|||
|---|---|---|---|
|
|||
Как текст преобразовать в часть запроса? |
|||
|
#18+
Alex MarmuzevichТипа такого? http://stackoverflow.com/questions/7433201/are-there-any-way-to-execute-a-query-inside-the-string-value-like-eval-in-post осталось выяснить, что станется с переданными в строке переменными типа id. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
06.03.2015, 19:20
|
|||
|---|---|---|---|
|
|||
Как текст преобразовать в часть запроса? |
|||
|
#18+
лопата, Смотрите, есть выборка из БД к примеру 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 и добавляться в запрос ответ которого должна вернуть вся эта функция. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
06.03.2015, 19:33
|
|||
|---|---|---|---|
|
|||
Как текст преобразовать в часть запроса? |
|||
|
#18+
Alex Marmuzevich, В целом это решает проблему, но раз уж использовать функции то решил провести все нужные операции внутри нее включая переборку data = {1,2,3} в формат id = 1 OR id = 2 OR id = 3 , и пара вопросов насчет функций - как внедрить переданную информацию в запрос и как использовать два запроса внутри функции, если не сложно то посмотрите мое сообщение выше, там я привел пример того что я пытаюсь сделать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
06.03.2015, 20:22
|
|||
|---|---|---|---|
Как текст преобразовать в часть запроса? |
|||
|
#18+
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. или что-то сильно из той же оперы. еще раз : без забеганий, и рассказок про страшилки, и кусков своего безумия -- расскажите как стоит задача изначально, а не в вашем деформированном мире. может быть вы хотите совсем что-то банальное, типа Код: sql 1. но отсюда ж не видно, а у вас в голове -- туман там, за туманами, вечЬными, пьяными... щас спаю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
06.03.2015, 20:47
|
|||
|---|---|---|---|
|
|||
Как текст преобразовать в часть запроса? |
|||
|
#18+
лопата, Простите, а что вам не понятно? Есть таблица 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. Написал я конечно про таблицу, а не про другую базу, извиняюсь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
06.03.2015, 20:59
|
|||
|---|---|---|---|
Как текст преобразовать в часть запроса? |
|||
|
#18+
Generalproger, низачод ты этта, проспись, а завтра попробуй заново сформулировать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
06.03.2015, 21:08
|
|||
|---|---|---|---|
Как текст преобразовать в часть запроса? |
|||
|
#18+
слюшай, а могабыть ты вот этава проста хочишь: Код: sql 1. тока сказть неможишь ? нет ? ти падумай, поспи, ещё падумай -- может быть речь и наладицца ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
06.03.2015, 21:09
|
|||
|---|---|---|---|
|
|||
Как текст преобразовать в часть запроса? |
|||
|
#18+
лопата, Дак как я понимаю помочь вы не можете?) Меня в данный момент интересует две вполне простые вещи, как поставить константу в функциях и как ее потом встроить в запрос. Насчет py.data я понимаю что сильно все напутал, просто в момент когда задавал вопрос я думал реализовать это вложенными запросами, а как теперь понял так не выйдет. В принципе ситуация тут я так думаю для бывалых людей в таких страшных SQL извращениях простая, надо просто из переданного в функцию массива data содержащего несколько циферок составить часть SQL выражения и встроить эту часть в запрос, потом вернуть ответ этого запроса RETURN-ом функции. В остальную часть этой запутанной инфраструктуры думаю вам лезть не обязательно т.к. вы просто запутаетесь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
06.03.2015, 21:16
|
|||
|---|---|---|---|
Как текст преобразовать в часть запроса? |
|||
|
#18+
Generalproger, слушай, дятел, это у тебя в голове мухи е@утся и полная неспособность что-то внятное формулировать т.ч. ограничь свои усилия своими проблемами -- попытайся внятно сформулировать задачу а уж где я запутаюсь -- это не твоё , долбоклювье дело не смочь написать строку для execute - это полная профнепригодность но самое смешное, что сдаётся этого и не требуется есть такая чуйка ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
06.03.2015, 21:18
|
|||
|---|---|---|---|
|
|||
Как текст преобразовать в часть запроса? |
|||
|
#18+
лопата, Я вот вашу функцию не понимаю, array_to_json(fin||data) Что она вообще вернуть то в данном случае должна? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
06.03.2015, 21:20
|
|||
|---|---|---|---|
|
|||
Как текст преобразовать в часть запроса? |
|||
|
#18+
лопата, Извиняюсь, что вы так сердитесь? Я просто реально не могу понять как вам объяснить задачу, функция должна вернуть не эквивалент массива а выборку по переданным идентификаторам из таблицы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
06.03.2015, 21:28
|
|||
|---|---|---|---|
Как текст преобразовать в часть запроса? |
|||
|
#18+
Generalproger, о, уже лучше продолжайте пытаться сформулировать, и всё получится 1. что из 2. чего, по 3. какому условию отфильтрвать ? только без домыслов, а битым словом что касается предыдущего -- то это просто конкатенация массивов в обрамлении вашей любимой ф--ии Код: sql 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
06.03.2015, 21:37
|
|||
|---|---|---|---|
|
|||
Как текст преобразовать в часть запроса? |
|||
|
#18+
лопата, Из таблицы ah_py Поля data, param (У них param[3]=2 поэтому они не попадают основной запрос, они являются наследниками выборки где param[3]=1) Фильтровать по списку идентификаторов которые в data ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
06.03.2015, 21:43
|
|||
|---|---|---|---|
Как текст преобразовать в часть запроса? |
|||
|
#18+
Generalprogerлопата, Из таблицы ah_py Поля data, param (У них param[3]=2 поэтому они не попадают основной запрос, они являются наследниками выборки где param[3]=1) Фильтровать по списку идентификаторов которые в data ну попробуем Код: sql 1. 2. 3. 4. и чо ? всё ? или опять всё неверно сформулировано ? что фильтровать ,куда фильтровать ? вы в 3-х словах плутаете, а четвёртым куда-то прыгаете ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
06.03.2015, 21:47
|
|||
|---|---|---|---|
|
|||
Как текст преобразовать в часть запроса? |
|||
|
#18+
лопата, Основной запрос 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
06.03.2015, 21:55
|
|||
|---|---|---|---|
Как текст преобразовать в часть запроса? |
|||
|
#18+
Generalprogerлопата, Основной запрос SELECT data,param FROM ah_py WHERE param[3]=1 У него в data лежат идентификаторы нескольких строк этой же таблицы только у которых param[3] = 2. а строка с param[3]=1 -- она одна ? Код: sql 1. 2. 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 опять скачем. вы не с кыев--града, часом ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
06.03.2015, 21:57
|
|||
|---|---|---|---|
|
|||
Как текст преобразовать в часть запроса? |
|||
|
#18+
лопата, Да прикол в том что надо то все это дело вместе одним ответом выйти)) Нет не с киева, а с Питера ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
06.03.2015, 22:00
|
|||
|---|---|---|---|
Как текст преобразовать в часть запроса? |
|||
|
#18+
Generalprogerлопата, Да прикол в том что надо то все это дело вместе одним ответом выйти)) Нет не с киева, а с Питера прикол пока в том, что вы не в состоянии ни на какой мове законченно сформулировать проблему. Поэтому арсеналы стоят не стрелянные. А дата - не выбранные. вам наверное забыли рассказать -- что формулировка задачи -- это 90 %% её решения. а что в питере уже скачут ? типа -- в пику клятым москалям ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
06.03.2015, 22:02
|
|||
|---|---|---|---|
|
|||
Как текст преобразовать в часть запроса? |
|||
|
#18+
лопата, Эх я вам значит объяснить никак не смогу :( Все-таки если можете просто расскажите по поводу той функции что я скидывал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
06.03.2015, 22:15
|
|||
|---|---|---|---|
Как текст преобразовать в часть запроса? |
|||
|
#18+
Generalprogerлопата, Эх я вам значит объяснить никак не смогу :( Все-таки если можете просто расскажите по поводу той функции что я скидывал таки ищете кривую лехкую дорожку ? RTFM, однако Код: sql 1. 2. 3. 4. 5. 6. 7. хотя вот это вот всё -- это просто : Код: sql 1. --т.ч. "на колу мочало, начинай сначала" не напомните, кто там после кшатриев идёт ? какую касту питерасты уже в православные кодеры призвали ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=53&mobile=1&tid=1998133]: |
0ms |
get settings: |
10ms |
get forum list: |
24ms |
check forum access: |
6ms |
check topic access: |
6ms |
track hit: |
51ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
74ms |
get tp. blocked users: |
2ms |
| others: | 202ms |
| total: | 390ms |

| 0 / 0 |
