PDO::sqliteCreateAggregate
Pdo\Sqlite::createAggregate
(PHP 8 >= 8.4.0)
Pdo\Sqlite::createAggregate — Registers an aggregating user-defined function for use in SQL statements
Beskrivning
Den här metoden är liknande Pdo\Sqlite::createFunction(), men registrerar funktioner som kan användas för att beräkna ett resultat som aggregeras över alla rader i en fråga.
Huvudskillnaden är att två funktioner krävs: en för att hantera varje rad (step) och en för att slutföra aggregeringen (finalize).
Tips: Genom att använda den här metoden är det möjligt att åsidosätta inbyggda SQL-funktioner.
Parametrar
- name: Namnet på funktionen som används i SQL-uttryck.
- step: Callback-funktion som anropas för varje rad i resultatuppsättningen.
Denna funktion måste definieras som:
step( mixed $context, int $rownumber, mixed $value, mixed ...$values ): mixed
**Parametrar för step:** * context: null för den första raden, annars värdet som returnerades av föregående step-anrop. * rownumber: Aktuellt radnummer. * value: Det första argumentet som skickas till aggregeringsfunktionen. * values: Ytterligare argument.
Returvärdet används som context i nästa anrop av step eller finalize.
- finalize: Callback-funktion för att aggregera data från alla rader. Funktionen anropas när alla rader har behandlats och ska returnera resultatet.
Denna funktion måste definieras som:
fini(mixed $context, int $rowcount): mixed
**Parametrar för finalize:** * context: Värdet som returnerades från sista anropet till step. * rowcount: Antalet rader som aggregeringen har utförts över.
Returvärdet används som det slutgiltiga resultatet av aggregeringen.
- numArgs: Anger för SQLite-parsern om callback-funktionen tar ett bestämt antal argument.
Returvärde
Returnerar true vid framgång eller false vid fel.
Exempel
Exempel #1: Pdo\Sqlite::createAggregate()
I det här exemplet skapar vi en anpassad aggregeringsfunktion, kallad max_length, som beräknar längden på den längsta strängen i en kolumn.
<?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(array($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()); ?>
Tips: Det rekommenderas inte att lagra värden i context för senare bearbetning, eftersom detta kan orsaka hög minnesanvändning vid stora resultatuppsättningar.
Se även
- Pdo\Sqlite::createFunction() - Registrerar en användardefinierad funktion för användning i SQL-uttryck.
- Pdo\Sqlite::createCollation() - Registrerar en användardefinierad funktion för användning som sorteringsfunktion i SQL-uttryck.
- 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.