SQLite (PDO)
PHP Manual

PDO::sqliteCreateAggregate

(PHP 5 >= 5.1.0, PECL pdo_sqlite >= 1.0.0)

PDO::sqliteCreateAggregateSQL deyimlerinde kullanmak üzere veri toplayıcı bir kullanıcı tanımlı işlevi kayda geçirir

Açıklama

bool PDO::sqliteCreateAggregate ( string $işlev_ismi , callback $sekme_işlevi , callback $son_işlev [, int $değş_sayısı ] )
Uyarı

Bu işlev DENEYSELDİR. Bu işlevin davranışı, ismi ve belgeleri PHP'nin sonraki sürümlerinde hiçbir duyuru yapılmaksızın değiştirilebilir. Bu riski göze alamayacaksanız bu işlevi kullanmayın.

Sorgudaki tüm satırlardan toplanan verilerden bir sonucu hesaplamak için kullanılacak bir işlevi kayda alması dışında PDO::sqliteCreateFunction() işlevi gibidir.

PDO::sqliteCreateFunction() ile bu yöntem asarındaki asıl fark toplanan verilerin yönetimi ile ilgilidir.

Değiştirgeler

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. PHP işleviniz sonuçları toparlayıp bir toparlama bağlamına kaydetmelidir.

Bu işlev şunların tanımlanmasını gerektirir:

sek ( mixed $bağlam , int $satırnum , mixed $değer1 [, mixed $değer2 [, mixed $.. ]] )

bağlam ilk satır için NULL olacaktır; sonraki satırlarda ise önceki sekme işlevinden dönen değer olacaktır. Bunu toparlama durumunu sürdürmek için kullanmalısınız.

satırnum geçerli satır numarasını içerecektir.

son_işlev

Satırlardan adım adım toplanan veriden sonucu hesaplayacak geriçağırım işlevi. Bu işlev tüm veriler toparlama bağlamında toplandıktan sonra çağrılır ve hesap sonucunu döndürür. Dönüş türü SQLite tarafından bilinen veri türlerinden biri olmalıdır (sayıl türler gibi).

Bu işlev şunların tanımlanmasını gerektirir:

son ( mixed $bağlam , int $satırnum )

bağlam, son sekme çağrısından dönen değeri içerir.

satırnum toparlama işleminde kullanılan toplam satır sayısını içerir

Bu işlevin dönüş değeri toparlama işleminin sonucu olarak kullanılır.

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

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.

Örnekler

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

<?php
$veri 
= array(
   
'bir',
   
'iki',
   
'üç',
   
'dört',
   
'beş',
   
'altı',
   
'yedi',
   
'sekiz',
   
'dokuz',
   
'on',
   );
$db = new PDO('sqlite::memory:');
$db->exec("CREATE TABLE dizgeler(a)");
$deyim $db->prepare('INSERT INTO dizgeler VALUES (?)');
foreach (
$veri as $dizge) {
    
$deyim->execute(array($dizge));
}
$deyim null;

function 
azami_uzunluk_sek(&$bağlam$satırnum$dizge)
{
    if (
strlen($dizge) > $bağlam) {
        
$bağlam strlen($dizge);
    }
    return 
$bağlam;
}

function 
azami_uzunluk_son(&$bağlam$satırnum)
{
    return 
$bağlam;
}

$db->sqliteCreateAggregate('azami_uzunluk',
        
'azami_uzunluk_sek''azami_uzunluk_son');

var_dump($db->query('SELECT azami_uzunluk(a) from dizgeler')->fetchAll());

?>

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_son 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.

İ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

PDO::sqliteCreateFunction() ve PDO::sqliteCreateAggregate() işlevlerini yerleşik SQLite SQL işlevlerini geçersiz kılmak için kullanabilirsiniz.

Bilginize:

Bu yöntem, SQLite2 sürücüsü ile kullanılamaz; eski tarz SQLite arayüzünü kullanmalısınız.

Ayrıca Bakınız


SQLite (PDO)
PHP Manual