sqlite_create_aggregate

SQLiteDatabase->createAggregate

(PHP 5 < 5.4.0, PECL sqlite >= 1.0.0)

sqlite_create_aggregate -- SQLiteDatabase->createAggregateSQL deyimlerinde kullanmak üzere toparlayıcı bir kullanıcı tanımlı işlevi kayda geçirir

Açıklama

sqlite_create_aggregate ( resource $db , string $işlev_ismi , callback $sekme_işlevi , callback $sonuncu_işlev [, int $değ_sayısı = -1 ] ) : void

Nesne yönelimli kullanım

createAggregate ( string $işlev_ismi , callback $sekme_işlevi , callback $sonuncu_işlev [, int $değ_sayısı = -1 ] ) : void

Bir sorgudaki tüm satırlardan toparlanan bir sonucu hesaplayacak bir işlevi kayda geçirmesi dışında sqlite_create_function() işlevi gibidir.

Bu işlevin sqlite_create_function() işlevinden farkı bir değil üç işlevi kayda geçirmesidir. Betiğiniz gerekli sonuç kümesini sağlar. Sonuç kümesindeki her satır için sekme_işlevi çağrılarak elde edilen sonuçlarla toparlama bağlamı oluşturulur. Toparlama bağlamından veriyi alıp sonucu döndürmek için ise sonuncu_işlev çağrılır. Bu geriçağırım işlevlerinin SQLite'ın tanıdığı veri türlerini döndürmesi gerekir (bir sayıl tür gibi).

Değiştirgeler

db

SQLite Veritabanı özkaynağı. Yordamsal kullanımda sqlite_open() işlevi tarafından döndürülür. Nesne yönelimli kullanımda bu değiştirgeye gerek yoktur.

işlev_ismi

SQL deyimlerinde kullanılacak işlev ismi.

sekme_işlevi

Sonuç kümesindeki her satır için çağrılacak geriçağırım işlevi.

sonuncu_işlev

Satırlardan adım adım toplanan veriden sonucu hesaplayacak geriçağırım işlevi.

değ_sayısı

Geriçağırım işlevi belli sayıda değiştirge gerektiriyorsa SQLite çözümleyiciye bir ipucu vermek için kullanılır.

Dönen Değerler

Hiçbir değer dönmez.

Örnekler

Örnek 1 - azami_uzunluk işlevi örneği

<?php
$data 
= array(
   
'one',
   
'two',
   
'three',
   
'four',
   
'five',
   
'six',
   
'seven',
   
'eight',
   
'nine',
   
'ten',
   );
$db sqlite_open(':memory:');
sqlite_query($db"CREATE TABLE strings(a)");
foreach (
$data as $str) {
    
$str sqlite_escape_string($str);
    
sqlite_query($db"INSERT INTO strings VALUES ('$str')");
}

function 
azami_uzunluk_sek(&$baglam$dizge)
{
    if (
strlen($dizge) > $baglam) {
        
$baglam strlen($dizge);
    }
}

function 
azami_uzunluk_bitir(&$baglam)
{
    return 
$baglam;
}

sqlite_create_aggregate($db'azami_uzunluk''azami_uzunluk_sek',
                          
'azami_uzunluk_bitir');

var_dump(sqlite_array_query($db'SELECT azami_uzunluk(a) from strings'));

?>

Bu örnekte, bir tablonun sütunlarında bulunan dizgelerin en uzununun boyunu hesaplayan bir veri toparlama işlevi oluşturulmaktadır. Her satır için azami_uzunluk_sek işlevi çağrılmakta ve önceki $baglam değiştirgesindekinden daha uzun olan dizge daima $baglam değiştirgesindekiyle değiştirilmektedir. $baglam değiştirgesi herhangi bir PHP değişkeni gibi bir dizi veya nesne tutabilmelidir.

Bütün satırlar işlemden geçirildikten sonra SQLite, sonucu döndürmek için azami_uzunluk_bitir işlevini çağırır. Burada $baglam değiştirgesindeki veriye dayalı her çeşit hesaplama yapabilirdik. Örneğimiz basit olsun çalıştırılan sorgudan elde edilen sonucu basit bir işleme sokup elde ettiğimiz bağlamı döndürmekle yetindik.

Bilginize:

Yukarıdaki örnek, ikil veri içeren sütunlar varsa gerektiği gibi çalışmaz. Bunun sebebini ve ikil kodlamayla nasıl çalışıldığını öğrenmek için sqlite_udf_decode_binary() işlevinin açıklamasına bakınız.

İpucu

Değerlerin kopyalarını bağlamda saklayıp sonra bunlar üzerinde işlem yapmanız önerilmez. Yoksa SQLite'ın sorguyu işlemek için çok fazla bellek kullanmasına sebep olursunuz. Her biri 32 baytlık bir dizge içeren bir milyon satır için ne kadar bellek gerektiğini bir düşünün.

İpucu

SQLite'ın dahili SQL işlevlerini geçersiz kılmak için sqlite_create_function() ve sqlite_create_aggregate() işlevlerini kullanabilirsiniz.

Ayrıca Bakınız