PDO::sqliteCreateAggregate: Skillnad mellan sidversioner

Från Wiki.linux.se
Hoppa till navigering Hoppa till sök
(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 redigeringssammanfattning
 
Rad 1: Rad 1:
== Pdo\Sqlite::createAggregate ==
== Pdo\Sqlite::createAggregate ==
''(PHP 8 >= 8.4.0)''
'''(PHP 8 >= 8.4.0)'''


'''Pdo\Sqlite::createAggregate''' Registers an aggregating user-defined function for use in SQL statements
Pdo\Sqlite::createAggregate — Registrerar en aggregerande användardefinierad funktion för användning i SQL-frågor.


=== Beskrivning ===
=== 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.
'''public Pdo\Sqlite::createAggregate(
    string $name,
    callable $step,
    callable $finalize,
    int $numArgs = -1
): bool'''


Huvudskillnaden är att två funktioner krävs: en för att hantera varje rad (step) och en för att slutföra aggregeringen (finalize).
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 den här metoden är det möjligt att åsidosätta inbyggda SQL-funktioner.
'''Tips:''' Genom att använda denna metod kan inbyggda SQL-funktioner åsidosättas.


=== Parametrar ===
=== Parametrar ===
* '''name''': Namnet på funktionen som används i SQL-uttryck.
; name
* '''step''': Callback-funktion som anropas för varje rad i resultatuppsättningen.
: Namnet på funktionen som ska användas i SQL-frågor.
  Denna funktion måste definieras som:
  <pre>
  step(
      mixed $context,
      int $rownumber,
      mixed $value,
      mixed ...$values
  ): mixed
  </pre>
  **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''.
; 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 för att aggregera data från alla rader. Funktionen anropas när alla rader har behandlats och ska returnera resultatet.
; finalize
  Denna funktion måste definieras som:
: Callback-funktion som aggregerar det ackumulerade data från varje rad.
  <pre>
: Funktionens definition:
  fini(mixed $context, int $rowcount): mixed
<pre>
  </pre>
fini(mixed $context, int $rowcount): mixed
  **Parametrar för finalize:**
</pre>
  * '''context''': Värdet som returnerades från sista anropet till ''step''.
: '''context:''' Håller värdet från sista anropet till step-funktionen.
  * '''rowcount''': Antalet rader som aggregeringen har utförts över.
: '''rowcount:''' Antal rader över vilka aggregeringen gjordes.
 
: Returnerade värdet används som aggregeringens slutresultat.
  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.
; numArgs
: En indikation för SQLite-parsaren om hur många argument funktionen accepterar.


=== Returvärde ===
=== Returvärden ===
Returnerar '''true''' vid framgång eller '''false''' vid fel.
Returnerar ''true'' vid framgång eller ''false'' vid misslyckande.


=== Exempel ===
=== Exempel ===


==== Exempel #1: Pdo\Sqlite::createAggregate() ====
==== Exempel 1: Skapa en aggregerande funktion ====
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.
 
<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(array($str));
     $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) from strings')->fetchAll());
var_dump($db->query('SELECT max_len(a) FROM strings')->fetchAll());
?>
?>
</pre>
</pre>


'''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.
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, detta kan orsaka att SQLite använder mycket minne för att behandla frågan.


=== Se även ===
=== Se även ===
* [[Pdo\Sqlite::createFunction()]] - Registrerar en användardefinierad funktion för användning i SQL-uttryck.
* [[Pdo\Sqlite::createFunction]] Registrerar en användardefinierad funktion för användning i SQL-frågor.
* [[Pdo\Sqlite::createCollation()]] - Registrerar en användardefinierad funktion för användning som sorteringsfunktion i SQL-uttryck.
* [[Pdo\Sqlite::createCollation]] Registrerar en användardefinierad funktion som kollationsfunktion i SQL-frågor.
* [[sqlite_create_function()]]
* sqlite_create_function()
* [[sqlite_create_aggregate()]]
* 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.