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::createAggregateRegisters a PHP function for use as an SQL aggregate function

= NULL

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

Registers a PHP function or user-defined function for use as an SQL aggregate function for use within SQL statements.

Параметри

name

Name of the SQL aggregate to be created or redefined.

stepCallback

Callback function called for each row of the result set. Your PHP function should accumulate the result and store it in the aggregation context.

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

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

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

rownumber

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

value

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

values

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

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

Callback function to aggregate the "stepped" data from each row. Once all the rows have been processed, this function will be called and it should then take the data from the aggregation context and return the result. This callback function should return a type understood by SQLite (i.e. скаларен тип).

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

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

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

rownumber

Секогаш 0.

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

The number of arguments that the SQL aggregate takes. If this parameter is negative, then the SQL aggregate may take any number of arguments.

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

Патеката до PHP скриптата што треба да се провери. true upon successful creation of the aggregate, or false при неуспех.

Примери

Example #1 max_length aggregation function example

<?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)

In this example, we are creating an aggregating function that will calculate the length of the longest string in one of the columns of the table. For each row, the max_len_step функцијата се повикува и ѝ се предава $context parameter. The context parameter is just like any other PHP variable and be set to hold an array or even an object value. In this example, we are simply using it to hold the maximum length we have seen so far; if the $string има должина поголема од моменталниот максимум, го ажурираме контекстот за да ја задржиме оваа нова максимална должина.

After all of the rows have been processed, SQLite calls the max_len_finalize function to determine the aggregate result. Here, we could perform some kind of calculation based on the data found in the $context. In our simple example though, we have been calculating the result as the query progressed, so we simply need to return the context value.

Совети

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

Совети

Можете да користите SQLite3::createAggregate() to override SQLite native SQL functions.

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

boris dot dd at gmail dot com
пред 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
)
*/
sukmaagungsaputra 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.