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.