Ассоциация ЭБНИТ    ИРБИС-корпорация    Вики-Ирбис    Online/CHM справка Ирбис   
Система ИРБИС в целом :  ИРБИС Irbis
 
Поисковый запрос с условием ИЛИ
Пользователь: DiManiac (IP-адрес скрыт)
Дата: 03, February, 2006 13:21

Как в формате построить запрос к словарю по периоду подписки, если мне нужны только первые четыре символа - год?

'PP=2005' дает пустой ответ, 'PP=2005$' ищет и 2005, и 2006 года...

То есть мне нужен и период 2005/0, и 2005/1, и 2005/2, и 2005/1-6 etc.

Re: Поисковый запрос с условием ИЛИ
Пользователь: Панев Максим (IP-адрес скрыт)
Дата: 03, February, 2006 15:46

Не должно 2006 года выходить. Это не правильно. Напиши формат полностью.

Re: Поисковый запрос с условием ИЛИ
Пользователь: DiManiac (IP-адрес скрыт)
Дата: 03, February, 2006 16:06

База CMPL, фрагмент файла SELTAB64.par:

TABLUK
1
tabluk.ws
if p(v39) then '"PP=',&unifor("G0/"v39),'$"' fi,if p(v39) and (p(v36)or p(v99)) then '*' fi,if p(v36) then '"KAT=',v36,'"' fi,if p(v99)and p(v36) then '*' fi,if p(v99) then '"VD=',v99,'"' fi

"^A"v36,"^B"v99.2,"^E"v39
*****

Re: Поисковый запрос с условием ИЛИ
Пользователь: Очагова Л.Н. (IP-адрес скрыт)
Дата: 03, February, 2006 16:43

if p(v39) then '"PP=',&unifor("G0/"v39),'$"' fi
Конструкция правильная, но может вы не учитываете, что префикс PP= формируется на архивных полях, т.е. по нему отбираются записи, в которых в архиве есть год 2005, но могут быть и года 2006 и т.д. В РЛ tabluk метка поля периода подписки 39?

Re: Поисковый запрос с условием ИЛИ
Пользователь: DiManiac (IP-адрес скрыт)
Дата: 03, February, 2006 17:08

Да, 39 - период подписки. Выводы о результатах поиска я делаю по полю 33 из найденных записей. Сейчас посмотрю механизм формирования словаря по префиксу PP...

Re: Поисковый запрос с условием ИЛИ
Пользователь: DiManiac (IP-адрес скрыт)
Дата: 17, March, 2006 18:41

Прошел месяц... :) Префикс я сделал новый, строящийся строго по полю 33.


Теперь возник вопрос - в строке четыре описания выходной формы бывают написаны очень странные вещи, вроде нескольких (невложенных) if-fi подряд, в которых задаются префиксы поиска либо звездочки...
Как это работает? Мне сейчас надо искать по двум полям опросного листа, для каждого свой префикс, условие И.

Можно сделать дополнительный отбор в самой форме, но два поиска по словарю будут быстрее, конечно.



Отправка отредактированного (17-03-06 18:46)

Re: Поисковый запрос с условием ИЛИ
Пользователь: DiManiac (IP-адрес скрыт)
Дата: 21, March, 2006 16:25

Обьясните все-таки, пожалуйста, эти строки:

if p(v39) then '"PP=',&unifor("G0/"v39),'$"' fi,if p(v39) and (p(v36)or p(v99)) then '*' fi,if p(v36) then '"KAT=',v36,'"' fi,if p(v99)and p(v36) then '*' fi,if p(v99) then '"VD=',v99,'"' fi

из seltab64.par ...

Re: Поисковый запрос с условием ИЛИ
Пользователь: DiManiac (IP-адрес скрыт)
Дата: 27, March, 2006 12:21

up

Re: Поисковый запрос с условием ИЛИ
Пользователь: Дунаевская (IP-адрес скрыт)
Дата: 27, March, 2006 14:56

Форму TABLUK Вы разработали самостоятельно.
В Seltab64.par есть такая строка
if p(v39) then '"AP=',v39,'"' fi,if p(v39) and (p(v36)or p(v99)) then '*' fi,if p(v36) then '"KAT=',v36,'"' fi,if p(v99)and p(v36) then '*' fi,if p(v99) then '"VD=',v99,'"' fi
Она действует в описаниях таблиц, получаемых по РЛ опроса abo.ws, и определяет отбор записей БД в таблицу по поисковому запросу - результату расформатирования на модельной записи в форме поискового выражения, состоящего из 3-х терминов (термин в двойных кавычках), разделенных знаками * (или)
"AP=<значение v39>" * "KAT=<значение v36>" * "VD=<значение v99>"

В РЛ abo.ws определены метки полей: 39 (поиск по AP=), 36 (поиск по KAT=), 99 (справочник vdk.mnu)


Re: Поисковый запрос с условием ИЛИ
Пользователь: DiManiac (IP-адрес скрыт)
Дата: 28, March, 2006 18:28

>состоящего из 3-х терминов (термин в двойных кавычках), разделенных знаками * (или)
>"AP=<значение v39>" * "KAT=<значение v36>" * "VD=<значение v99>"

А я и не знал, что можно так объединять сразу несколько поисковых вопросов :)
Большое спасибо, Светлана Михайловна!

Re: Поисковый запрос с условием ИЛИ
Пользователь: Дунаевская (IP-адрес скрыт)
Дата: 28, March, 2006 20:20

Явно это можно задавать только в АРМе Комплектатор при подготовке таблиц (в SELTAB.PAR) и в задании вторичного поиска для связанных записей (параметр SecondFmt в Irbisp.ini).
В комплексном поиске такая структура работает скрытно.

Re: Поисковый запрос с условием ИЛИ
Пользователь: DiManiac (IP-адрес скрыт)
Дата: 30, March, 2006 16:52

Светлана Михайловна, вот '*' - это ИЛИ. Я поискал в файле и решил, что И - это '+'.

Но с вот такой строкой:

if p(v39) then '"PPP=',&unifor("G0/"v39),'$"' fi,if p(v39) and p(v99) then '+' fi,if p(v99) then '"VD=',v99,'$"' fi

у меня второй запрос (VD=v99$) просто игнорируется :( и получается 527 записей (именно столько отвечает запросу PPP=&unifor("G0/"v39))

Зато если плюс поменять на *, то работает именно как условие И. Можно пояснить этот момент?



Извините, только зарегистрированные пользователи могут писать в этом форуме.
This forum powered by Phorum.