Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
выборка значения ( LIKE наоборот )
|
|||
|---|---|---|---|
|
#18+
Есть база с примерно такой структурой. ext | count 1234 100 12345 200 У меня есть значение 1234567. Как мне сделать выборку из базы таким образом, чтобы я нашел одно значение которое максимально подходит под мою исхзодную строку. Посути мое значение по начальным строкам совпадает со второй строкой базы. Как мне сделать такой запрос , чтобы база тоже поняла это ? Мне нужно чтобы это было реализовано только на уровне postgresql Спасибо за ответ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2006, 01:42 |
|
||
|
выборка значения ( LIKE наоборот )
|
|||
|---|---|---|---|
|
#18+
В общем нашел идею прошу помочь с реализацией. Нужно число 1234567 разобрать по кускам и сделать запрос типа select * from table where ext=1234567 or etx=123456 or ext=12345 or ext=1234 or ext=123 or ext=12 or ext=1 order by ext desc limit 1 Вот такой запрос нужно сделать . А теперь просьба . Ка кмн енаписать функцию , или запрос строкой, чтобы он это автоматизировал . ? И сам разбирал номер , и формировал такую строку запроса? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2006, 02:58 |
|
||
|
выборка значения ( LIKE наоборот )
|
|||
|---|---|---|---|
|
#18+
CREATE OR REPLACE FUNCTION test0( ext0 text ) RETURNS text AS $$ DECLARE count0 integer := 0; ask TEXT; nxt TEXT; tmp TEXT; BEGIN FOR count0 IN 1..length(ext0) LOOP nxt := 'ext=' || substring(ext0 from 1 for count0); ask := ask || ' or ' || nxt; END LOOP; RETURN ask; END; Сделал такую функцию , но при вызове выдает NULL . В чем может быть загвоздка? Если делаю эту (ask := ask || ' or ' || nxt;) строку такой - ask := ' or ' || nxt; То оно мне просто выдает последнее значение цыкла, а почемуто строки не обединяет через весь цикл , помтгите пожлуйста. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2006, 03:50 |
|
||
|
выборка значения ( LIKE наоборот )
|
|||
|---|---|---|---|
|
#18+
И еще - как мне вызвать эту функцию внутри запроса ? А то такое не помогает . select * from tarif where || test0(100) || order by ext desc; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2006, 03:54 |
|
||
|
выборка значения ( LIKE наоборот )
|
|||
|---|---|---|---|
|
#18+
У типа поле ext какой тип данных имеет? ----------------------------------------------------------------------------------------------------------------------------------------- З.Ы. Неспешно ищу работу, согласен на переезд в Москву или Питер ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2006, 05:48 |
|
||
|
выборка значения ( LIKE наоборот )
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2006, 06:32 |
|
||
|
выборка значения ( LIKE наоборот )
|
|||
|---|---|---|---|
|
#18+
IgorNK Код: plaintext 1. Но в целом идея правильная - автору осталось только добавить сортировочку (убывающую) по длине значений ext е взять первую строку посредством limit. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2006, 07:26 |
|
||
|
выборка значения ( LIKE наоборот )
|
|||
|---|---|---|---|
|
#18+
Владимор Конев IgorNK Код: plaintext 1. Но в целом идея правильная - автору осталось только добавить сортировочку (убывающую) по длине значений ext е взять первую строку посредством limit.Ну и это, того - аггрегатную функцию надо нафиг выкинуть, ибо я больше чем уверен, что автору интереснее получить не само поле ext, а значение из поля count. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2006, 07:27 |
|
||
|
выборка значения ( LIKE наоборот )
|
|||
|---|---|---|---|
|
#18+
это уже обсуждалось ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2006, 09:39 |
|
||
|
выборка значения ( LIKE наоборот )
|
|||
|---|---|---|---|
|
#18+
Владимор Конев , Выкинуть не выйдет, это ведь один из критериев - макс. соответствие. Можно уточнить, напр. так Код: plaintext и для подмножества выбрать остальные нужные поля. Автору вопроса виднее, как результат использовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2006, 12:34 |
|
||
|
выборка значения ( LIKE наоборот )
|
|||
|---|---|---|---|
|
#18+
IgorNK Владимор Конев , Выкинуть не выйдет, это ведь один из критериев - макс. соответствие. Можно уточнить, напр. так Код: plaintext и для подмножества выбрать остальные нужные поля. Автору вопроса виднее, как результат использовать.Очень даже выйдет :) Уж если через limit нельзя будет сделать (это в случае, если на входе будетне одно конкретное значение 1234567, а целый список), то через коррелированный подзапрос точно можно будет реализовать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2006, 12:54 |
|
||
|
выборка значения ( LIKE наоборот )
|
|||
|---|---|---|---|
|
#18+
select max(length(ext)) where strpos(arg, ext) = 1 Я чето не понял А куда это пихать применительно к моей фнкции???? Или можно ограничиться просто запросом? Мне ведь нужно найти строку. А из строки вывести значение определенного столбца. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2006, 16:18 |
|
||
|
выборка значения ( LIKE наоборот )
|
|||
|---|---|---|---|
|
#18+
Вот ваш вопрос из первого поста: авторКак мне сделать выборку из базы таким образом, чтобы я нашел одно значение которое максимально подходит под мою исхзодную строку Вот запрос, который должен вам это выдать: Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2006, 17:22 |
|
||
|
выборка значения ( LIKE наоборот )
|
|||
|---|---|---|---|
|
#18+
2 Автор топика. Ты так и не ответил на мой вопрос , поэтому я предполагаю, что у тебя поле ext имеет строковый тип (varchar, например) Вот решение твоей задачи (это же типа биллинга? определить код направления, куда звонили, по набраному номеру): ПУсть есть таблица calls со звонками: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Пусть так же есть таблица с кодами и с тарифами по этим кодам: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Вот запрос, который делает "тарификацию" разговоров, сопоставляю каждому звонку код направления по вызываемому номеру: Код: plaintext 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. ----------------------------------------------------------------------------------------------------------------------------------------- З.Ы. Неспешно ищу работу, согласен на переезд в Москву или Питер ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2006, 05:56 |
|
||
|
выборка значения ( LIKE наоборот )
|
|||
|---|---|---|---|
|
#18+
Вот запрос, который делает "тарификацию" разговоров, сопоставляю каждому звонку код направления по вызываемому номеру: А с какой скоростью эта конструкция работает в реальной жизни? Это ж ведь full scan, насколько я понимаю ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2006, 09:50 |
|
||
|
выборка значения ( LIKE наоборот )
|
|||
|---|---|---|---|
|
#18+
ilejn Вот запрос, который делает "тарификацию" разговоров, сопоставляю каждому звонку код направления по вызываемому номеру: А с какой скоростью эта конструкция работает в реальной жизни? Это ж ведь full scan, насколько я понимаю ...Ну во-первых, использование индекса данная конструкция не исключает. А во-вторых, иногда и фуллскан бывает оправдан, все зависит от количества данных и от того, как они запрашиваются. Более того, если нужно из таблицы (той, что приводил автор топика) выдергивать запись по внешнему передаваемому параметру (опять же, если вспомнить постановку задачи автором, то там ситуация такая - есть таблица, есть входной параметр, необходимо выбрать по этому параметру данные из таблицы, при условии, что "значение максимально подходит под мою исходную строку"), то такой вариант однозначно можно будет посадиьт на индекс, при условии что он (индекс, то бишь) в системе существует :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2006, 10:04 |
|
||
|
выборка значения ( LIKE наоборот )
|
|||
|---|---|---|---|
|
#18+
ilejn Вот запрос, который делает "тарификацию" разговоров, сопоставляю каждому звонку код направления по вызываемому номеру: А с какой скоростью эта конструкция работает в реальной жизни? Это ж ведь full scan, насколько я понимаю ...Кстати, никто тебе не мешает сделать простенький тестик на предмет выяснения быстродействия этой конструкции :) По крайней мере на моем серваке такое работает за милую душу :) И индексы использует без дополнительных телодвижений с моей стороны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2006, 10:05 |
|
||
|
выборка значения ( LIKE наоборот )
|
|||
|---|---|---|---|
|
#18+
Спасиба всем разобрался меня устроит вариант с select max(ext) where strpos(arg, ext) = 1; Но есть теперь новая проблема. Ща топик создам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2006, 01:32 |
|
||
|
выборка значения ( LIKE наоборот )
|
|||
|---|---|---|---|
|
#18+
burvinkleСпасиба всем разобрался меня устроит вариант с select max(ext) where strpos(arg, ext) = 1; Но есть теперь новая проблема. Ща топик создам.А вот такую конструкцию на индекс не посадишь. Будет идти полное сканирование таблицы. Можно, конечно, заменить полным сканированием индекса по полю ext, но это будет всё равно не то :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.07.2006, 05:31 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=33849589&tid=2006237]: |
0ms |
get settings: |
9ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
74ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
65ms |
get tp. blocked users: |
2ms |
| others: | 259ms |
| total: | 448ms |

| 0 / 0 |
