Условная выборка (запрос pick)

Для выборки записей, данные которых удовлетворяют определенным условиям, используется запрос:
pick[поле][оператор]=значение, где
поле – это номер поля, данные которого сравниваются с заданным значением,
оператор – это оператор сравнения, который можно выбрать из следующего списка:

Операторы сравнения
ОператорРасшифровка
анг.рус.мат.
ltless thanменьше чем<
leless or equal меньше или равно
eqequalравно=
gegreater or equalбольше или равно
gtgreater thanбольше чем>
nenot equalне равно

Приведем примеры запросов:

pick.tpl
<?php echo "

<table>";
    foreach ($tab as $dat)
    echo "
        <tr>
        <td>{$dat['edit']}</td>
        <td>$dat[1]</td>
        <td>$dat[2]</td>
        </tr>
    "; echo "
</table>

<!-- Выбрать записи со значениями данных в первом поле от 100 до 200 включительно -->
<a href='?page=$page&block=$block&pick[1][ge]=100&pick[1][le]=200'>[100...200]</a>

<!-- Выбрать записи со значениями поля от 100 до 200, исключая сами числа 100 и 200 -->
<a href='?page=$page&block=$block&pick[1][gt]=100&pick[1][lt]=200'>(100...200)</a>

<!-- Выбрать записи со значением первого поля, равным 100 -->
<a href='?page=$page&block=$block&pick[1][eq]=100'>Равно 100</a>

<!-- Выбрать записи со значением первого поля, не равным 100 -->
<a href='?page=$page&block=$block&pick[1][ne]=100'>Не равно 100</a>

<!-- Отмена условий выборки -->
<a href='?page=$page'>Показать все записи</a>

"; ?>

pick.tdd
<?php

$types[1] = 'int';
$types[2] = 'varchar(100)'; // Комментарии

$params['multi-record'] = true;

?>

В одном запросе можно задавать условия для нескольких полей. Значениями массива pick могут выступать числовые, символьные, и некоторые временные данные. Выборки не будут работать для тех данных, для которых невозможны операции сравнения .

Короткая форма записи pick-запроса

На условной выборке построена, так называемая, pick-навигация, где применяются запросы вида pick[][eq] (выборка записей с точным значением данного). Для таких запросов была введена короткая форма записи p[].

Она удобна при запросах одновременно к нескольким полям. При этом, например, код pick[1][eq]=44&pick[2][eq]=66 будет выглядеть, как p[1]=44&p[2]=66.

Рекомендуем условиться применять короткую форму только для pick-навигации, тогда вам не придется переписывать инструкции для поисковых роботов, находящихся в файле robots.txt. А в остальных случаях применяйте стандартную форму с запросом pick.

Выборка одной записи с помощью pick-запроса

Вместо номера поля в качестве ключа массива pick допустимо применять 'rec'.

Пример: ?block=11&p[rec]=22. Такой запрос дает почти такой же результат, как и запрос single?block=11&single=22, за исключением того, что не будут извлечены соседние записи.

Естественно, если в шаблоне предусмотрено другое представления для режима single, то блок при pick-запросе в этом представлении выведен не будет.

Pick-запрос к одной записи можно применять, когда с помощью ajax мы обновляем одну запись среди множества других записей:

<script>
    $.ajax({
        url: '?block=11&p[rec]=22',
        success: function(response) {
            $('#rec-22').html(response)
        }
    })
</script>


См. также