PDO::sqliteCreateAggregate

Från Wiki.linux.se
Version från den 23 december 2024 kl. 06.40 av 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...')
(skillnad) ← Äldre version | Nuvarande version (skillnad) | Nyare version → (skillnad)
Hoppa till navigering Hoppa till sök

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

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.