ScotlandPHP

SQLite3::createAggregate

(PHP 5 >= 5.3.0, PHP 7)

SQLite3::createAggregateEnregistre une fonction PHP à utiliser comme fonction d'aggrégation SQLite

Description

public bool SQLite3::createAggregate ( string $name , mixed $step_callback , mixed $final_callback [, int $argument_count = -1 ] )

Enregistre une fonction PHP ou une fonction définie par l'utilisateur à utiliser comme fonction d'aggrégation SQL, qui sera utilisée dans les requêtes SQL.

Liste de paramètres

name

Nom de la fonction d'aggrégation SQL à créer ou à redéfinir.

step_callback

Le nom de la fonction PHP ou de la fonction utilisateur à appliquer comme callback sur tous les éléments de l'aggrégation.

final_callback

Le nom de la fonction PHP ou de la fonction utilisateur à appliquer comme callback à la fin des données de l'aggrégation.

argument_count

Le nombre d'arguments pris par la fonction d'aggrégation SQL. Si ce nombre est négatif, alors la fonction d'aggrégation SQL pourra prendre un nombre non défini d'arguments.

Valeurs de retour

Retourne TRUE si la création réussie, FALSE si une erreur survient.

add a note add a note

User Contributed Notes 2 notes

up
2
boris dot dd at gmail dot com
9 months 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
2 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