sql. Создание массива на основе выборки из базы данных

^array::sql{запрос}  
^array::sql{запрос}[
$.sparse(false|true) $.limit(n) $.offset(n) $.distinct(true|false) $.bind[variables hash] $.type[hash|string|table]]

Конструктор на основе результата SQL-запроса создает по умолчанию обычный массив. Если задан параметр
$.sparse(true), создается сразреженный массив, в котором индексы элементов совпадают со значениями первого столбца выборки. По умолчанию каждый элемент массива - это хеш, где имена столбцов используются в качестве ключей, а соответствующие им значения - это данные столбцов.

Дополнительные параметры конструктора:
$.sparse(false|true)
false или 0 = создать обычный массив. Значения строк выборки последовательно добавляются в массив (по умолчанию)
true или 1 = создать разреженный массив. Первая колонка данных должна содержать индексы, по которым будут размещены значения (аналогично ^hash::sql{})
$.limit(n)
получить только n записей
$.offset(n)
отбросить первые n записей выборки
$.bind[hash]
связанные переменные, см. «Работа с IN/OUT-переменными»
$.distinct(true|false)
false или 0 = считать наличие дубликата ошибкой (по умолчанию);
true или 1 = выбрать из таблицы записи с уникальным ключом.
$.type[hash/string/table]
hash = значение каждого элемента - хеш (по умолчанию);
string = значение каждого элемента - строка, при этом нужно указать ровно один (два в случае $.sparse(true)) столбца в SQL-запросе;
table = значение каждого элемента - таблица со всеми колонками результата.


По умолчанию наличие в ключевом столбце одинаковых значений считается ошибкой. Если наличие дубликатов допустимо, следует задать опцию
$.distinct(true). В этом случае в качестве данных для каждого ключа используется первая встреченная строка, последующие строки с тем же ключом игнорируются без ошибки. А если задать $.type[table], для каждого ключа формируется таблица со всеми записями, имеющими этот ключ.


Пример array of hash
В БД содержится таблица
test_table:
pet   food   aggressive
cat   milk   very
dog   bone   never

Выполнение кода:
^connect[строка подключения]{
   $array_of_hash[^array::sql{
      
select 
         pet,
         food,
         aggressive
      from 
         test_table
   }]
}

даст массив такой структуры:
$array_of_hash[
      $.pet[
cat]
      $.food[
milk]
      $.aggressive[
very]
;
      $.pet[
dog]
      $.food[
bone]
      $.aggressive[
never]
]

из которого можно извлекать информацию, например, так:
$animal[$array_of_hash.0]
$animal.pet
 любит $animal.food

Пример array of table
В БД содержится таблица
students
name   subject   grade
Mike   Math   5
Alex   Math   
4
Ivan   History   5

Выполнение кода:
^connect[строка подключения]{
   $students[^array::sql{
select grade, name, subject from students}[ $.sparse(1) $.distinct(true) $.type[table] ]]
}

даст разреженный массив такой структуры:
$students[^array::create[]]
$students.4[^table::create{grade   name   subject
4   Alex   Math}]
$students.5[^table::create{grade   name   subject
5   Make   Math
5   Ivan   History}]

из которого можно извлекать информацию, например, так:
Оценок отлично^students.5.count[]


Copyright © 1997–2024 Art. Lebedev Studio | http://www.artlebedev.ru Дата обновления: 19.12.2024