Services webmasters
Partenaires
Jeux concours gratuits
 
sqlite_column
<<<
sqlite_create_aggregate sqlite_create_function
>>>

7.96 SQLite
7 Index des fonctions
 Manuel PHP

Introduction
Installation
Contacts
Pré-requis
Types de ressources
Constantes prédéfinies
Configuration à l'exécution
sqlite_array_query
sqlite_busy_timeout
sqlite_changes
sqlite_close
sqlite_column
->sqlite_create_aggregate
sqlite_create_function
sqlite_current
sqlite_error_string
sqlite_escape_string
sqlite_fetch_array
sqlite_fetch_single
sqlite_fetch_string
sqlite_field_name
sqlite_has_more
sqlite_last_error
sqlite_last_insert_rowid
sqlite_libencoding
sqlite_libversion
sqlite_next
sqlite_num_fields
sqlite_num_rows
sqlite_open
sqlite_popen
sqlite_query
sqlite_rewind
sqlite_seek
sqlite_udf_decode_binary
sqlite_udf_encode_binary
sqlite_unbuffered_query

7.96.13 sqlite_create_aggregate()Enregistre une UDF agregeante pour les requêtes SQLite

[ Exemples avec sqlite_create_aggregate ]   CVS uniquement

bool  sqlite_create_aggregate ( resource   dbhandle , string   function_name , mixed   step_func , mixed   finalize_func , int   num_args )

sqlite_create_aggregate est similaire à sqlite_create_function , car elle enregistre une fonction qui sera utilisée pour calculer un résultat agrégé sur plusieurs lignes d'une requête.

La différence principale entre cette fonction et sqlite_create_function est que deux fonctions sont nécessaires pour gérer les agrégations : step_func est appelée pour chaque ligne du résultat. Votre fonction PHP doit accumuler le résultat, et le stocker dans le contexte d'agrégation. Une fois que toutes les lignes ont été appelées, finalize_func sera appelée, et elle doit alors lire les données dans ce contexte d'agrégation, et en retourner le résultat.

Exemple d'UDF SQLite : taille maximale de chaîne

<?php
$data
= array(
   
'one',
   
'two',
   
'three',
   
'four'
   'five'
   'six'
,
   
'seven',
   
'eight',
   
'nine'
   'ten'
   
);
$db = sqlite_open(':memory:');
sqlite_query($db, "CREATE TABLE strings(a)");
foreach (
$data as $str) {
  
sqlite_query($db, "INSERT INTO strings VALUES('" .
    
sqlite_escape_string($str) . "')");
}

function
max_len_step(&$context, $string) {
  if (
strlen($string) > $context) {
    
$context = strlen($string);
  }
}

function
max_len_finalize(&$context) {
  return
$context;
}

sqlite_create_aggregate($db, 'max_len', 'max_len_step', 'max_len_finalize');

var_dump(sqlite_array_query($db, 'SELECT max_len(a) from strings'));

?>

Dans cet exemple, nous créons une fonction d'agrégation qui va calculer la taille de la plus longue chaîne dans l'une des colonnes de la table. Pour chaque ligne, la fonction max_len_step est appelée, et reçoit le paramètre context . Le contexte est une autre variable PHP , et il peut contenir un tableau ou même un objet. Dans notre exemple, nous l'utilisons pour stocker la taille maximale de la colonne courante. Si string est plus grand que la valeur maximale que nous avons enregistré, nous modifions notre contexte en conséquence.

Une fois que toutes les lignes ont été traitées, SQLite appelle la fonction max_len_finalize pour déterminer le résultat de l'agrégation. Nous pourrions alors effectuer plusieurs calculs en fonction des données que nous avons récolté dans context . Dans notre exemple simple, nous avons calculé le résultat au fur et à mesure de la progression de la requête, ce qui nous permet de n'avoir qu'à retourner la valeur de notre contexte.

Note

L'exemple ci-dessus ne fonctionnera pas correctement si une colonne contient une donnée binaire. Reportez-vous à la fonction sqlite_udf_decode_binary pour plus de détails, et d'un exemple pour travailler avec des chaînes binaires.

Array Array

Voir aussi sqlite_create_function , sqlite_udf_encode_binary et sqlite_udf_decode_binary .

<< sqlite_create_aggregate >>
sqlite_column SQLite sqlite_create_function
Services webmasters
Les manuels
 
CoursPHP.com - Reproduction interdite -