Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Сортировка по списку в IN()
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! Помогите, пожалуйста, решить вопрос с сортировкой. Есть простой запрос (Postgresql 9.5): Код: sql 1. Вместо $arg_str скрипт PHP подставляет список переменных параметров - $1,$2,$3... Сами параметры передаются отдельно (pg_query_params(), результат возвращается ассоц. массивом - pg_fetch_assoc()). Ни кол-во параметров, ни их конкретные значения заранее неизвестны. Известно только, что они из одного столбца (первичный ключ). Нужно получить результат в том же порядке, в котором перечислены параметры в IN($1,$2,$3...). Покопал мануал ORDER BY, погуглил, здесь порыл немного - пока безрезультатно. Может есть спец. функции, хитрости формата запроса или вообще для получения этого результата при таких вводных можно использовать др. запрос? Буду благодарен за подсказку (сам только начал осваиваться в Постгресе) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2016, 14:37 |
|
||
|
Сортировка по списку в IN()
|
|||
|---|---|---|---|
|
#18+
передавай массив. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2016, 14:42 |
|
||
|
Сортировка по списку в IN()
|
|||
|---|---|---|---|
|
#18+
Выполнение динамически формируемых команд] https://postgrespro.ru/docs/postgrespro/9.5/plpgsql-statements.html#PLPGSQL-STATEMENTS-EXECUTING-DYN ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2016, 14:43 |
|
||
|
Сортировка по списку в IN()
|
|||
|---|---|---|---|
|
#18+
p2., не понял, что - куда - как передавать массивом... Можно чуть подробнее? Legushka, тоже не понял, как это может помочь решить задачу сортировки... P.S. Новичок я. Пожалуйста, поясняйте идею в двух словах :)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2016, 15:02 |
|
||
|
Сортировка по списку в IN()
|
|||
|---|---|---|---|
|
#18+
coder234, Допустим, у вас есть список: Код: sql 1. Если его формить как массив, то можно его потом развернуть с сохранением индексов: Код: sql 1. И первоначальный запрос переделать в что-то такое: Код: sql 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2016, 15:34 |
|
||
|
Сортировка по списку в IN()
|
|||
|---|---|---|---|
|
#18+
vyegorovcoder234, Допустим, у вас есть список: Код: sql 1. Если его формить как массив, то можно его потом развернуть с сохранением индексов: Код: sql 1. И первоначальный запрос переделать в что-то такое: Код: sql 1. 2. 3. 4. Спасибо за объяснение! Я пока решил эту задачу на стороне скрипта (пересортировав массив результатов по массиву параметров), вроде во времени выполнения особо не потерял. Как-то все сложно здесь :)), в MySQL вроде существуют спец.функции аккурат для данного случая. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2016, 17:15 |
|
||
|
Сортировка по списку в IN()
|
|||
|---|---|---|---|
|
#18+
где-то была статья как раз на эту тему, там сравнивались разные варианты с values + join, order by case, unnest + row_number. но никак не могу найти ссылку. но эти варианты для старых версий актуальны, если 9.4+ то стоит использовать unnest with ordinality, как выше в примере. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2016, 17:44 |
|
||
|
Сортировка по списку в IN()
|
|||
|---|---|---|---|
|
#18+
coder234ла-ла-лаКак-то все сложно здесь :)), в MySQL вроде существуют спец.функции аккурат для данного случая. Конструкция `WITH ORDINALITY` является частью SQL стандарта, вы можете ожидать аналогичный функционал в других СУБД, которые поддерживают стандарт. Так что всё сложно в MySQL, ага... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2016, 20:02 |
|
||
|
Сортировка по списку в IN()
|
|||
|---|---|---|---|
|
#18+
Если передавать конкретные аргументы, типа $arg_str="3,12,5,9,23,8"; то SELECT * FROM unnest('{3,12,5,9,23,8}'::int[]) WITH ORDINALITY o(num,ord); работает. А если передавать параметры аргументов (из php-функции pg_query_params() - словом, как было сказано в 1 посте) - $arg_str="$1,$2,$3,$4,$5,$6"; то то SELECT * FROM unnest('{$arg_str}'::int[]) WITH ORDINALITY o(num,ord); Не работает... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2016, 19:16 |
|
||
|
Сортировка по списку в IN()
|
|||
|---|---|---|---|
|
#18+
coder234Не работает...Незнание sql не противоречит незнанию php. С этим в другой форум. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2016, 20:17 |
|
||
|
Сортировка по списку в IN()
|
|||
|---|---|---|---|
|
#18+
Вот пример запроса без использования массивов. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Соответственно вместо (1),(3),(2) будет $arg_str ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2016, 14:44 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=39292000&tid=1996959]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
68ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
| others: | 14ms |
| total: | 177ms |

| 0 / 0 |
