Midwest PHP Call For Papers Open

SQLite3::createAggregate

(PHP 5 >= 5.3.0, PHP 7)

SQLite3::createAggregateToparlayıcı bir SQL işlevi olarak kullanılmak üzere bir PHP işlevini kayda geçirir

Açıklama

public SQLite3::createAggregate ( string $isim , mixed $sekme_işlevi , mixed $son_işlev [, int $değ_sayısı = -1 ] ) : bool

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

Değiştirgeler

isim

Oluşturulacak veya yeniden tanımlanacak toparlayıcı SQL işlevinin ismi.

sekme_işlevi

Verinin toplanacağı öğelerin her biriyle çalıştırılacak PHP işlevinin veya kullanıcı tanımlı işlevin ismi.

son_işlev

Veri toplama işlemi bittikten sonra çalıştırılacak PHP işlevinin veya kullanıcı tanımlı işlevin ismi.

değ_sayısı

SQL işlevinin alacağı değiştirge sayısı. Negatif bir sayı belirtilirse SQL işlevi herhangi bir sayıda değiştirge alabilir demektir.

Dönen Değerler

İşlev başarıyla oluşturulmuşsa TRUE yoksa FALSE döner.

add a note add a note

User Contributed Notes 2 notes

up
3
boris dot dd at gmail dot com
2 years ago
<?php
class Test extends SQLite3
{
    public function
__construct($file)
    {
       
parent::__construct($file);
       
$this->createAggregate('groupConcat', [$this, 'concatStep'], [$this, 'concatFinal']);
    }
    public function
concatStep(&$context, $rowId, $string, $delimiter)
    {
        if (!isset(
$context)) {
           
$context = [
               
'delimiter' => $delimiter,
               
'data'      => []
            ];
        }
       
$context['data'][] = $string;
        return
$context;
    }
    public function
concatFinal(&$context)
    {
        return
implode($context['delimiter'], $context['data']);
    }
}
$SQLite = new Test('/tmp/test.sqlite');
$SQLite->exec("create table `test` (`id` TEXT, `color` TEXT, `size` TEXT)");
$SQLite->exec("insert into `test` (`id`, `color`, `size`) values ('1', 'red', 'M')");
$SQLite->exec("insert into `test` (`id`, `color`, `size`) values ('1', 'green', 'M')");
$SQLite->exec("insert into `test` (`id`, `color`, `size`) values ('1', 'blue', 'S')");
$Result = $SQLite->query("select `size`, groupConcat(`color`, ';') as `color` from `test` group by `size`");
while (
$row = $Result->fetchArray(SQLITE3_ASSOC)) {
   
print_r($row);
}
/*
Array
(
    [size] => M
    [color] => red;green
)
Array
(
    [size] => S
    [color] => blue
)
*/
up
-3
sukmaagungsaputra at gmail dot com
4 years ago
Lacks of example, right?
Let's try to give to SQlite3 the capability like ones of MySQL's
- REGEXP operator,
- MD5 function, and
- GROUP_CONCAT aggregate function

$db = new SQLite3($filename);
$db->createFunction('regexp', function ($a,$b) { return preg_match("/$a/i", $b); });
$db->createFunction('md5', function ($a) { return md5($a); });
$db->createAggregate ('group_concat',
            function(&$context, $rownumber, $str) { $context[]=$str; return $context; },
            function(&$context) {return implode(",", (array) $context); });
To Top