(PHP 5 >= 5.3.0, PHP 7, PHP 8)
SQLite3::createAggregate — Toparlayıcı bir SQL işlevi olarak kullanılmak üzere bir PHP işlevini kayda geçirir
$isim
,$sekme_işlevi
,$son_işlev
,$değş_sayısı
= -1SQL deyimlerinde toparlayıcı bir SQL işlevi olarak kullanılmak üzere bir PHP işlevini veya bir kullanıcı tanımlı işlevi kayda geçirir.
isim
Oluşturulacak veya yeniden tanımlanacak toparlayıcı SQL işlevinin ismi.
sekme_işlevi
Sonuç kümesinin her satırı için çalıştırılacak geriçağırım işlevinin ismi. Bu geriçağırım işlevi sonucu biriktirmeli ve toparlayıcı bir bağlamda saklamalıdır.
Bu işlev şöyle tanımlanmalıdır:
bağlam
İlk satır için null
; sonraki satırlarda sekme_işlevinden evvelce dönmüş değer. Bunu toparlayıcı bağlamı oluşturmakta kullanmalısınız.
satır_num
İşlenen satır numarası.
değer
Toparlayıcı bağlama aktarılacak ilk bağımsız değişken.
değerler
Toparlayıcı bağlama aktarılacak diğer bağımsız değişkenler.
bağlam
bağımsız değişkeninde kullanılmalıdır. son_işlev
Veri toplama işlemi bittikten sonra çalıştırılacak geriçağırım işlevinin ismi. Tüm satırlar işlendikten sonra, bu işlev çağrılmalı ve ardından verileri toparlama bağlamından alıp sonucu döndürmelidir. Bu geri çağırım işlevi, SQLite tarafından bilinen türde bir değer (yani değişmez bir değer) döndürmelidir.
Bu işlev şöyle tanımlanmalıdır:
bağlam
Son sekme_işlevinden dönen değer.
satır_num
Daima 0
.
değş_sayısı
SQL işlevinin alacağı bağımsız değişken sayısı. Negatif bir sayı belirtilirse SQL işlevi herhangi bir sayıda bağımsız değişken alabilir demektir.
Örnek 1 - en_uzun toparlayıcı işlev örneği
<?php
$data = array(
'one',
'two',
'three',
'four',
'five',
'six',
'seven',
'eight',
'nine',
'ten',
);
$db = new SQLite3(':memory:');
$db->exec("CREATE TABLE strings(a)");
$insert = $db->prepare('INSERT INTO strings VALUES (?)');
foreach ($data as $str) {
$insert->bindValue(1, $str);
$insert->execute();
}
$insert = null;
function en_uzun_sekme($baglam, $str_num, $dizge)
{
if (strlen($dizge) > $baglam) {
$baglam = strlen($dizge);
}
return $baglam;
}
function en_uzun_son($baglam, $str_num)
{
return $baglam === null ? 0 : $baglam;
}
$db->createAggregate('en_uzun', 'en_uzun_sekme', 'en_uzun_son');
var_dump($db->querySingle('SELECT en_uzun(a) from strings'));
?>
Yukarıdaki örneğin çıktısı:
int(5)
Bu örnekte, tablonun sütunlarından birindeki en uzun dizenin uzunluğunu hesaplayacak bir toparlama işlevi oluşturulmaktadır. Her satır için en_uzun_sekme
işlevi çağrılmakta ve bir $baglam
bağımsız değişkenine aktarılmaktadır. $baglam
bağımsız değişkeni, diğer PHP değişkenleri gibidir ve bir diziyi veya hatta bir nesne değerini tutacak şekilde ayarlanabilir. Bu örnekte, bulunan en büyük uzunluğu tutmak için kullanılmaktadır. $dizge
önceki en uzun dizgeden daha uzunsa, $baglam
bağımsız değişkeni bu yeni değeri tutacak şekilde güncellenmektedir.
Tüm satırlar işlendikten sonra SQLite, toparlama sonucunu belirlemek için en_uzun_son
işlevini çağırır. Burada, $baglam
da bulunan verilere dayanarak bir tür hesaplama yapılabilir. Yine de bu basit örnekte, sorgu ilerledikçe sonuç hesaplanmakta, bu nedenle bağlam değerini döndürmek yeterli olmaktadır.
SQLite'ın sorguyu işlemek için çok fazla bellek kullanmasına neden olacağından, değerlerin bir kopyasının bağlamda saklanması ve ardından bunların en sonda işlenmesi ÖNERİLMEZ. Her biri 32 bayt uzunluğunda bir dizge içeren bir milyon satır...
SQLite3::createAggregate() yöntemi SQLite'ın dahili SQL işlevlerini geçersiz kılmak için kullanılabilir.