Синтаксис SQL-выражений

SQL-выражения используются в системе TreeGraph для задания значений параметров, управляющих различными выборками или условиями показа объектов, а также при работе с фильтром модуля JM. В выборку попадают те объекты из базы данных, для которых установленное выражение (условие) верно (истинно, =1). Синтаксис данных выражений полностью соответствует определению WHERE в SQL-операторе SELECT. Выражение может содержать:

1. Имена переменных (любой атрибут объекта TreeGraph или параметр, хранящийся в таблице в виде отдельного поля)

2. Круглые скобки () - для группировки отдельных выражений и определения порядка выполнения операции.

3. Операторы сравнения

= - Равно

<> или !=  - Не равно

<= - Меньше или равно

<  - Меньше

>=  - Больше или равно

>  - Больше

expr BETWEEN min AND max - Величина выражения expr находится в диапазоне min, max. Аналог (min<=expr AND expr<=max)

expr NOT BETWEEN min AND max - Величина выражения expr находится вне диапазона min, max.

expr IN (value,...) - Выражение expr равно любой величине из списка IN

expr NOT IN (value,...) - Выражение expr не равно ни одной из величин из списка IN

4. Логические операторы

NOT - Логическое НЕ. Возвращает 1, если операнд равен 0, 0 если операнд - ненулевая величина.

AND - Логическое И. Дает 1 если все операнды ненулевые, 0 если один или более операндов равны 0.

OR - Логическое ИЛИ. Возвращает 1, если любой из операндов не 0, в остальных случаях возвращает 0.

XOR - Логический XOR (побитовое сложение по модулю 2). Возвращает 1 если нечетное количество операндов - не 0.

5. Функции сравнения строк

expr LIKE pat - Функция производит сравнение с шаблоном, используя операции сравнения простых регулярных выражений в SQL.

expr NOT LIKE pat - Аналог NOT(expr LIKE pat).

Шаблон pat должен быть ограничен кавычками или апострофами и может содержать произвольный текст и следующие специальные символы:

% - Соответствует любому количеству символов, даже нулевых

_ - Соответствует ровно одному символу 

\% - Соответствует одному символу %

\_ - Соответствует одному символу _

expr REGEXP epat - Выполняет сравнение строкового выражения expr с шаблоном epat (расширенное регулярное выражение).

expr NOT REGEXP epat - То же, что и NOT(expr REGEXP epat).

Регулярное выражение epat должно быть ограничено кавычками или апострофами Кроме текста, в нем могут использоваться любые специальные символы/структуры из числа приведенных ниже:

^ - Соответствие началу строки.

$ - Соответствие концу строки.

. - Соответствие любому символу (включая перевод строки).

a* - Соответствие любой последовательности из нуля или более символов "a".

a+ - Соответствие любой последовательности из одного или более символов "a".

a? - Соответствие как нулю, так и одному символу "a".

de|abc - Соответствие как последовательности de, так и последовательности abc.

(abc)* - Соответствие нулю или более вхождениям последовательности abc.

a{i} - Последовательность, состоящая из i вхождений данного элемента.

a{i,} - Последовательность, состоящая из i и более вхождений данного элемента.

a{i,j} - Последовательность, состоящая от i до j вхождений данного элемента. 

[a-dX] - Устанавливает соответствие для любого символа, являющегося символом a, b, c, d или X

[^a-dX] - Устанавливает соответствие для любого символа, не являющегося символом a, b, c, d или X

MATCH (col1,col2,...) AGAINST (expr)

MATCH (col1,col2,...) AGAINST (expr IN BOOLEAN MODE)  - Функция используется для полнотекстового поиска и возвращает величину релевантности - степень сходства между текстом в столбцах (col1,col2,...) и запросом expr. Величина релевантности представляет собой положительное число с плавающей точкой. Нулевая релевантность означает отсутствие сходства.

6. Арифметические операции

+ - Сложение

- - Вычитание

* - Умножение

/ - Деление

7. Строковые функции (см. описание MySQL)

8 .Математические функции (см. описание MySQL)

9. Функции даты и времени (см. описание MySQL)

10. Другие функции (см. описание MySQL)

11. Константы (числа, строки, даты)

В качестве констант также можно использовать выражение $PARAMS[имя_параметра]. В этом случае при осуществлении выборки данное выражение заменяется на значение указанного параметра для текущего объекта. Это значение может установлено как в самом объекте, так и быть унаследовано от родителя или вышестоящих объектов (см. примеры).

Выражение $PARAMS[имя_параметра] можно использовать в основном тексте объекта (контенте) и в следующих параметрах:

ссылка - url

перенаправить - redirect

onclick - onclick

условие выбора - block_where

условие показа - block_check

заголовок блока - block_header

ссылка заголовка блока - block_header_link

концовка блока - block_tail

ссылка концовки блока - block_tail_link

условие связки - art_links

фильтр менеджера - manager_filter

условие для поиска - search_where

http запрос - http_query'

В качестве имя_параметра можно указать имя (переменную) любого параметра сайта, а также некоторые дополнительные ключевые слова (перед ключевым словом PARAMS необходимо добавить символ $):

PARAMS[today] - текущий день в формате ДД.ММ.ГГГГ

PARAMS[time] - текущее время в формате ЧЧ:ММ (время начала формирования HTML-страницы)

PARAMS[rand1] - сгенерированное случайное число 1

PARAMS[rand2] - сгенерированное случайное число 2

PARAMS[ip] - IP-адрес текущего пользователя

PARAMS[user_id] - идентификатор текущего пользователь (если он авторизован)

PARAMS[id] - идентификатор текущего объекта (страницы)

PARAMS[parent_id] - идентификатор родительского объекта текущей страницы

PARAMS[mess_header] - заголовок текущего объекта (страницы)

PARAMS[p_date] - день публикации текущего объекта в формате ДД.ММ.ГГГГ

PARAMS[parents_list] - список родительской ветви текущего объекта от корня до самого объекта через запятую

PARAMS[query_string] - строка запроса броузера

 

Примеры задания параметра "условие выбора" block_where

Описание выборки

id=1210

выбрать объект с идентификатором 1210

id=110 or id=111 or id=112

выбрать объекты с идентификаторами 110, 111, 112

id in (110,111,112)

выбрать объекты с идентификаторами 110, 111, 112

parent_id=201

выбрать объекты, дочерние для объекта с идентификатором 201

parent_id=201 and id<>111

выбрать объекты, дочерние для объекта с идентификатором 201, кроме объекта 111

parent_id in (201,202) and id not in (111,112)

выбрать объекты, дочерние для объектов 201 и 202, кроме объектов с идентификаторами 111, 112

parent_id=200 and ro=1

выбрать объекты дочерние к 200 и открытые всем на чтение

parents like '1,200,201%'

выбрать объект 201 и всех его потомков  (ветвь)

parents like '1,200,201,%' and level in (3,4)

выбрать объекты из ветви объекта 201 и находящиеся на уровнях 3 или 4

id in ($ PARAMS[parents_list]) and level>0 and id<>$ PARAMS[id]

выбрать объекты-родители, начиная с 1-го уровня, не включая текущий объект

mess_header like 'ab%'

выбрать объекты с заголовком, начинающимся с текста "ab"

mess_header like 'a__'

выбрать объекты с заголовком, начинающимся с буквы "a" и длиной в 3 символа

mess_short<>'' and mess_short not like '%сайт%'

Выборка объектов, у которых есть аннотация и она не содержит слово "сайт"

art_is=1 and art_type=2

выбрать объекты с установленным параметром art_is и параметром art_type равным 2

art_type='$ PARAMS[art_type]'

выбрать объекты с параметром art_type, равным текущему значению данного параметра

art_is and p_date='$ PARAMS [today]'

выбрать объекты с установленным параметром art_is и , сегодняшней датой публикации

art_is and id<>$ PARAMS[id]

выбрать объекты с установленным параметром art_is, кроме текущего объекта

publish_date >= DATE_SUB(NOW(),INTERVAL 3 day)

выбрать объекты, опубликованные за последние 3 дня

publish_date >= '2007-12-01 00:00:00' and publish_date <= '2007-12-31 23:59:59'

выбрать объекты, опубликованные в декабре 2007 года

seans_date1 <= NOW() and seans_date2 >= NOW()

выбрать объекты, для которых сегодняшняя дата и текущее время попадают в указанный временной интервал seans_date1 и seans_date2.

DATE_FORMAT(cont_bdate,'%m%d')=DATE_FORMAT(NOW(),'%m%d')

выбрать объекты с "днем рожденья" (параметр cont_bdate), равным сегодняшнему числу (без учета года)

cont_bdate>0 and
DATE_ADD(DATE_FORMAT(NOW(),'%Y%m%d'), INTERVAL 1 MONTH) > DATE_FORMAT(cont_bdate,CONCAT(YEAR(NOW()),'%m%d')) and DATE_FORMAT(NOW(),'%Y%m%d') < DATE_FORMAT(cont_bdate,CONCAT(YEAR(NOW()),'%m%d'))

выбрать объекты с "днем рожденья" (параметр cont_bdate), в течении ближайшего месяца (без учета года)

ip = '212.67.0.51'

выбрать объекты, введенных с ip адреса 212.67.0.51

ip like '212.67.0.%'

выбрать объекты, введенных с ip адресов сети 212.67.0.х

cnt > 10

выбрать объекты, у которых количество дочерних больше 10

match(art_words) against('$ PARAMS[art_words]' in boolean mode) and id<>$ PARAMS[id]

выбрать объекты с такими же ключевыми словами (параметр art_words), как у текущего объекта, кроме самого объекта

 

 

 

 

 

 

Примеры задания параметра "условие показа" block_check

Описание

1 или 1=1

показать на всех страницах сайта

id=1210

показать на странице объекта с идентификатором 1210

id in (200,201,302)

показать на страницах перечисленных объектов

parent_id=201

показать на страницах объектов, дочерних объекту 201

parents_id=201

показать на страницах объектов, находящихся в ветви с корнем 201 (parents_id - фиктивный атрибут, данный запрос автоматически заменяется на нижеследующий)

id='201' or parents like '%,201,%'

запрос аналогичный предыдущему

parents_id in (201,203)

показать на страницах объектов в ветвях с перечисленными корнями (parents_id - фиктивный атрибут, данный запрос автоматически заменяется на нижеследующий)

id in (201,203) or parents like '%,201,%' or parents like '%,203,%'

запрос аналогичный предыдущему

parents_id not in (100)

показать на всех страницах сайта, кроме объектов в ветви с корнем 100 (parents_id - фиктивный атрибут, данный запрос автоматически заменяется на нижеследующий)

id not in (100) and parents not like '%,100,%'

запрос аналогичный предыдущему

art_is

показать на страницах объектов с установленным параметром art_is (равным 1)

art_is and p_date='$ PARAMS[today]'

показать на страницах объектов с установленным параметром  art_is и сегодняшней датой публикации

Поиск по документации
Контактная информация
603000, Россия,
г. Нижний Новгород,
ул. Студеная, дом 5,
4-й этаж.
info@graphit.ru

(831) 260–16–32