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...') |
Admin (diskussion | bidrag) Ingen redigeringssammanfattning |
||
Rad 1: | Rad 1: | ||
== Pdo\Sqlite::createAggregate == | == Pdo\Sqlite::createAggregate == | ||
''(PHP 8 >= 8.4.0)'' | '''(PHP 8 >= 8.4.0)''' | ||
Pdo\Sqlite::createAggregate — Registrerar en aggregerande användardefinierad funktion för användning i SQL-frågor. | |||
=== Beskrivning === | === 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 | '''Tips:''' Genom att använda denna metod kan inbyggda SQL-funktioner åsidosättas. | ||
=== Parametrar === | === 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: | |||
<pre> | |||
step( | |||
mixed $context, | |||
int $rownumber, | |||
mixed $value, | |||
mixed ...$values | |||
): mixed | |||
</pre> | |||
: '''context:''' Första gången null, därefter värdet från den senaste step-funktionen. | |||
: '''rownumber:''' Radens nummer. | |||
: '''value:''' Det första argumentet för aggregeringen. | |||
: '''values:''' Ytterligare argument. | |||
: 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: | |||
<pre> | |||
fini(mixed $context, int $rowcount): mixed | |||
</pre> | |||
: '''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 | Returnerar ''true'' vid framgång eller ''false'' vid misslyckande. | ||
=== Exempel === | === Exempel === | ||
==== Exempel | ==== Exempel 1: Skapa en aggregerande funktion ==== | ||
<pre> | <pre> | ||
<?php | <?php | ||
Rad 70: | Rad 74: | ||
$insert = $db->prepare('INSERT INTO strings VALUES (?)'); | $insert = $db->prepare('INSERT INTO strings VALUES (?)'); | ||
foreach ($data as $str) { | foreach ($data as $str) { | ||
$insert->execute( | $insert->execute([$str]); | ||
} | } | ||
$insert = null; | $insert = null; | ||
Rad 89: | Rad 93: | ||
$db->createAggregate('max_len', 'max_len_step', 'max_len_finalize'); | $db->createAggregate('max_len', 'max_len_step', 'max_len_finalize'); | ||
var_dump($db->query('SELECT max_len(a) | var_dump($db->query('SELECT max_len(a) FROM strings')->fetchAll()); | ||
?> | ?> | ||
</pre> | </pre> | ||
'''Tips:''' | Utdata: | ||
<pre> | |||
array(1) { | |||
[0]=> | |||
array(1) { | |||
["max_len(a)"]=> | |||
int(5) | |||
} | |||
} | |||
</pre> | |||
'''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 === | === Se även === | ||
* [[Pdo\Sqlite::createFunction | * [[Pdo\Sqlite::createFunction]] — Registrerar en användardefinierad funktion för användning i SQL-frågor. | ||
* [[Pdo\Sqlite::createCollation | * [[Pdo\Sqlite::createCollation]] — Registrerar en användardefinierad funktion som kollationsfunktion i SQL-frågor. | ||
* | * sqlite_create_function() | ||
* | * sqlite_create_aggregate() | ||
= Sidslut = | = Sidslut = |
Nuvarande version från 23 december 2024 kl. 06.41
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 för aggregeringen.
- values: Ytterligare argument.
- 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.