Язык скриптования сайтов Parser 3

       

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

Содержание раздела