PDO::sqliteCreateAggregate: Skillnad mellan sidversioner
Admin (diskussion | bidrag) (Skapade sidan med '== 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...') |
(Ingen skillnad)
|
Versionen från 23 december 2024 kl. 06.40
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.