Hashsql
sql. Создание хеша на основе выборки из базы данных | |
^hash::sql{запрос}
^hash::sql{запрос}[$.limit(n) $.offset(o) $.distinct(d)]
Конструктор создает хеш, в котором имена ключей совпадают со значениями первого столбца выборки. Имена столбцов формируют ключи хеша, а значения столбцов - соответствующие этим ключам значения. Если столбцов больше одного, получается структура hash of hash.
Если же запрос возвращает только один столбец, формируется хеш, где значения столбца формируют ключи хеша, и им ставится в соответствие логическое значение истина. [3.1.2]
Дополнительные параметры конструктора:
$.limit(n) - получить только n записей
$.offset(o) - отбросить первые o записей выборки
$.distinct(1/0) - 1=отбирать записи с уникальным ключом, 0=считать наличие дубликата ошибкой
По-умолчанию, наличие в ключевом столбце одинаковых значений считается ошибкой, если вам необходимо именно отобрать из результата записи с уникальным ключом, задайте опцию $.distinct(1).
Примечание: имейте в виду, что так между клиентом и сервером передаются лишние данные, и, скорее всего, запрос можно изменить, чтобы необходимая уникальность ключа обеспечивалась SQL-сервером. Если вам необходимы данные и в виде таблицы и в виде хеша, подумайте над использованием table::sql в паре с table.hash.
Пример hash of hash
В БД содержится таблица hash_table:
pet food aggressive
cat milk very
dog bone never
Выполнение кода…
^connect[строка подключения]{
$hash_of_hash[^hash::sql{select
pet, food, aggressive
from
hash_table
}]
}
…даст хеш такой структуры…
$hash_of_hash[
$.cat[
$.food[milk]
$.aggressive[very]
]
$.dog[
$.food[bone]
$.aggressive[never]
]
]
… из которого можно эффективно извлекать информацию, например, так:
$animal[cat]
$animal любит $hash_of_hash.$animal.food
Пример hash of bool [3.1.2]
В БД содержится таблица participants:
participant
Константин
Александр
Выполнение кода…
^connect[строка подключения]{
$participants[^hash::sql{select participant from participants}]
}
…даст хеш такой структуры…
$participants[
$.Константин(1)
$.Александр(1)
]
…из которого можно эффективно извлекать информацию, например, так:
$person[Иван]
$person ^if($participants.$person){участвует}{не участвует} в мероприятии
Copyright © 1997?2004 Art. Lebedev Studio | http://www.artlebedev.ru | Дата обновления: 31.03.2004 |