Pdo\Sqlite::createAggregate
Pdo\Sqlite::createAggregate
(PHP 8 >= 8.4.0)
Pdo\Sqlite::createAggregate — Registrerar en aggregerande användardefinierad funktion för användning i SQL-frågor.
Beskrivning
public Pdo\Sqlite::createAggregate(
string $name, callable $step, callable $finalize, int $numArgs = -1
): bool
Denna metod liknar Pdo\Sqlite::createFunction men registrerar funktioner som används för att beräkna resultat aggregerade över alla rader i en fråga. Skillnaden är att två funktioner krävs: en för att ackumulera data (step) och en för att slutföra beräkningen (finalize).
Tips: Genom att använda denna metod kan inbyggda SQL-funktioner åsidosättas.
Parametrar
- name
- Namnet på funktionen som ska användas i SQL-frågor.
- step
- Callback-funktion som anropas för varje rad i resultatmängden. Den ska ackumulera resultatet och lagra det i aggregeringskontexten.
- Funktionens definition:
step(
mixed $context,
int $rownumber,
mixed $value,
mixed ...$values
): mixed
- context: Första gången null, därefter värdet från den senaste step-funktionen.
- rownumber: Radens nummer.
- value: Det första argumentet som skickas till aggregeringen.
- values: Ytterligare argument som skickas till aggregeringen.
- Returnerade värdet används som context vid nästa anrop av step eller finalize.
- finalize
- Callback-funktion som aggregerar det ackumulerade data från varje rad.
- Funktionens definition:
fini(mixed $context, int $rowcount): mixed
- context: Håller värdet från sista anropet till step-funktionen.
- rowcount: Antal rader över vilka aggregeringen gjordes.
- Returnerade värdet används som aggregeringens slutresultat.
- numArgs
- En indikation för SQLite-parsaren om hur många argument funktionen accepterar.
Returvärden
Returnerar true vid framgång eller false vid misslyckande.
Exempel
Exempel 1: Skapa en aggregerande funktion
<?php
$data = [
'one',
'two',
'three',
'four',
'five',
'six',
'seven',
'eight',
'nine',
'ten',
];
$db = new Pdo\Sqlite('sqlite::memory:');
$db->exec("CREATE TABLE strings(a)");
$insert = $db->prepare('INSERT INTO strings VALUES (?)');
foreach ($data as $str) {
$insert->execute([$str]);
}
$insert = null;
function max_len_step($context, $row_number, $string)
{
if (strlen($string) > $context) {
$context = strlen($string);
}
return $context;
}
function max_len_finalize($context, $row_count)
{
return $context === null ? 0 : $context;
}
$db->createAggregate('max_len', 'max_len_step', 'max_len_finalize');
var_dump($db->query('SELECT max_len(a) FROM strings')->fetchAll());
?>
Utdata:
array(1) {
[0]=>
array(1) {
["max_len(a)"]=>
int(5)
}
}
Tips: Försök inte lagra en kopia av alla värden i kontexten och bearbeta dem i slutet, då detta kan orsaka att SQLite använder mycket minne för att behandla frågan.
Se även
- Pdo\Sqlite::createFunction — Registrerar en användardefinierad funktion för användning i SQL-frågor.
- Pdo\Sqlite::createCollation — Registrerar en användardefinierad funktion som kollationsfunktion i SQL-frågor.
- sqlite_create_function()
- sqlite_create_aggregate()
Sidslut
Orginalhemsidan på Engelska :https://www.php.net/manual/en/pdo-sqlite.createaggregate.php
PHP
Funktioner
Funktionsreferens
Databas-tillägg
Det här är en maskinöversättning av PHP-manualen till svenska. Om du hittar fel är vi tacksamma om du rapporterar dem via formuläret som finns på
https://www.linux.se/kontaka-linux-se/
Tack till Datorhjälp Huddinge som har sponsrat Linux.se med webbhotell.