PHP.mk документација

SQLite3::createAggregate

Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.

sqlite3.createaggregate.php PHP.net прокси Преводот се освежува
Оригинал на PHP.net
Патека sqlite3.createaggregate.php Локална патека за оваа страница.
Извор php.net/manual/en Оригиналниот HTML се реупотребува и локално се стилизира.
Режим Прокси + превод во позадина Кодовите, табелите и белешките остануваат читливи во истиот тек.
SQLite3::createAggregate

Референца за `sqlite3.createaggregate.php` со подобрена типографија и навигација.

sqlite3.createaggregate.php

SQLite3::createAggregate

(PHP 5 >= 5.3.0, PHP 7, PHP 8)

SQLite3::createAggregateРегистрира PHP функција за употреба како SQL агрегатна функција

= NULL

public function SQLite3::createAggregate(
         string $name,
         callable $stepCallback,
         callable $finalCallback,
         int $argCount = -1
): bool

Регистрира PHP функција за употреба како SQL агрегатна функција

Параметри

name

Регистрира PHP функција или кориснички дефинирана функција за употреба како SQL агрегатна функција за употреба во SQL изрази.

stepCallback

Име на SQL агрегатот што треба да се креира или предефинира.

Оваа функција треба да биде дефинирана како:

function step(
         mixed $context,
         int $rownumber,
         mixed $value,
         mixed ...$values
): mixed
context

null Повикана функција за секој ред од резултатот. Повиканата функција треба да го акумулира резултатот и да го зачува во контекстот на агрегацијата.

rownumber

за првиот ред; на последователните редови ќе ја има вредноста што претходно била вратена од функцијата за чекор; треба да ја користите оваа за одржување на состојбата на агрегатот.

value

Тековниот број на редот.

values

Првиот аргумент предаден на агрегатот.

Понатамошни аргументи предадени на агрегатот. context Вратената вредност од оваа функција ќе се користи како
finalCallback

Повикувачка функција повикана за секој ред од множеството резултати. Вашата PHP функција треба да го акумулира резултатот и да го зачува во контекстот на агрегацијата. скаларен тип).

Оваа функција треба да биде дефинирана како:

function fini(mixed $context, int $rownumber): mixed
context

Повикана функција за агрегирање на „чекорирани“ податоци од секој ред. Откако ќе се обработат сите редови, оваа функција ќе биде повикана и треба да ги земе податоците од контекстот на агрегацијата и да го врати резултатот. Оваа повикана функција треба да врати тип што го разбира SQLite (т.е.

rownumber

Секогаш 0.

Го чува бројот на редови над кои е извршена агрегацијата.
argCount

Повикувачка функција за агрегирање на „чекорените“ податоци од секој ред. Откако сите редови ќе бидат обработени, оваа функција ќе биде повикана и таа треба да ги земе податоците од контекстот на агрегацијата и да го врати резултатот. Оваа повикувачка функција треба да врати тип разбирлив за SQLite (т.е.

Вратени вредности

Патеката до PHP скриптата што треба да се провери. true Бројот на аргументи што ги зема SQL агрегатот. Ако овој параметар е негативен, тогаш SQL агрегатот може да земе кој било број на аргументи. false при неуспех.

Примери

при успешно креирање на агрегатот, или

<?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
max_len_step($context, $rownumber, $string)
{
if (
strlen($string) > $context) {
$context = strlen($string);
}
return
$context;
}

function
max_len_finalize($context, $rownumber)
{
return
$context === null ? 0 : $context;
}

$db->createAggregate('max_len', 'max_len_step', 'max_len_finalize');

var_dump($db->querySingle('SELECT max_len(a) from strings'));
?>

Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред

int(5)

Пример #1 пример за функција за агрегирање max_length max_len_step функцијата се повикува и ѝ се предава $context Во овој пример, креираме агрегирачка функција која ќе ја пресмета должината на најдолгиот стринг во една од колоните на табелата. За секој ред, $string има должина поголема од моменталниот максимум, го ажурираме контекстот за да ја задржиме оваа нова максимална должина.

параметар. Контекст параметарот е како и секоја друга PHP променлива и може да се постави да држи вредност од тип низа или дури и објект. Во овој пример, ние едноставно го користиме за да ја задржиме максималната должина што сме ја виделе досега; ако max_len_finalize Откако сите редови ќе бидат обработени, SQLite ја повикува $contextфункцијата за да го одреди резултатот од агрегацијата. Овде, можеме да извршиме некаква пресметка врз основа на податоците пронајдени во

Совети

НЕ се препорачува да чувате копија од вредностите во контекстот, а потоа да ги обработувате на крајот, бидејќи би предизвикале SQLite да користи многу меморија за обработка на прашањето - само замислете колку меморија би ви била потребна ако милион редови беа складирани во меморијата, секој содржејќи низа долга 32 бајти.

Совети

Можете да користите . Во нашиот едноставен пример, сепак, го пресметувавме резултатот додека течеше прашањето, така што едноставно треба да ја вратиме вредноста на контекстот. SQLite3::createAggregate()

Белешки од корисници 2 забелешки

за да ги надвладее нативните SQL функции на SQLite.
пред 9 години
<?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
)
*/
boris dot dd at gmail dot com
пред 11 години
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); });
На оваа страница

Автоматски outline од активната документација.

Насловите ќе се појават тука по вчитување.

Попрегледно читање

Примерите, changelog табелите и user notes се визуелно издвоени за да не се губат во долгата содржина.

Брз совет Користи го outline-от Скокни директно на главните секции од активната страница.
Извор Оригиналниот линк останува достапен Кога ти треба целосен upstream context, отвори го PHP.net во нов tab.