SPIP

[ar] [ast] [bg] [br] [ca] [co] [cpf] [cs] [da] [de] [en] [eo] [es] [eu] [fa] [fon] [fr] [gl] [id] [it] [ja] [lb] [nl] [oc] [pl] [pt] [ro] [ru] [sk] [sv] [tr] [uk] [vi] [zh] Espace de traduction

Télécharger

{collecte}

Octobre 2009

Toutes les versions de cet article :

Le critère {collecte} permet de spécifier l’interclassement (la « collation ») pour la requête générée par une boucle (appel de la clause « COLLATE » de MySQL [1]).


Le critère {collecte}, (depuis SPIP 2.0), permet de forcer la requête sql, générée par la boucle à laquelle il est passé, à utiliser un interclassement spécifique pour la clause « ORDER BY » (critère {par ...}).

Exemple

Supposons une base en utf-8 avec ses tables en utf8 (DEFAULT CHARSET = utf8)

dans ce jeu de caractère (CHARACTER_SET_NAME) il est possible d’utiliser 21 collations (interclassements) différentes [2] :

COLLATION_NAME CHARACTER_SET_NAME
utf8_bin utf8
utf8_czech_ci utf8
utf8_danish_ci utf8
utf8_esperanto_ci utf8
utf8_estonian_ci utf8
utf8_general_ci utf8
utf8_hungarian_ci utf8
utf8_icelandic_ci utf8
utf8_latvian_ci utf8
utf8_lithuanian_ci utf8
utf8_persian_ci utf8
utf8_polish_ci utf8
utf8_roman_ci utf8
utf8_romanian_ci utf8
utf8_slovak_ci utf8
utf8_slovenian_ci utf8
utf8_spanish2_ci utf8
utf8_spanish_ci utf8
utf8_swedish_ci utf8
utf8_turkish_ci utf8
utf8_unicode_ci utf8

À partir de là, imaginons que dans la table « spip_articles » de cette base, table par défaut en interclassement utf8_general_ci, se trouvent les articles titrés :

Nana
nina
Nina
Niña
Ñiña
ñina
Ñina
Nono
Nunu

La boucle :

<BOUCLE_a(ARTICLES) {par titre} {"<br />"}>
 #TITRE
</BOUCLE_a>

retournera ces articles dans l’ordre alphabétique correspondant à l’interclassement par défaut de la table :

Nana
nina
Ñina
Nina
Niña
Ñiña
ñina
Nono
Nunu

La boucle :

#SET{collation, utf8_spanish_ci}
<BOUCLE_a(ARTICLES) {par titre} {collecte #GET{collation}} {"<br />"}>
 #TITRE
</BOUCLE_a>

retournera, elle, ces articles dans l’ordre alphabétique correspondant à l’interclassement demandé :

Nana
nina
Nina
Niña
Nono
Nunu
Ñina
ñina
Ñiña

Ainsi les ñ (n à tilde) seront classés après les n (n nus).
Cela correspond en effet à l’ordre alphabétique castillan :

La requête MySQL produite est alors :

 SELECT articles.titre, articles.lang
     FROM spip_articles AS `articles`
   WHERE articles.statut = 'publie'
       AND articles.date < '9999-12-31'
ORDER BY articles.titre COLLATE utf8_spanish2_ci

Limite

Il n’est pas possible de faire fonctionner le critère {collecte} en lui affectant « directement » sa valeur dans la liste des arguments de boucle : les {collecte utf8_spanish_ci}, {collecte 'utf8_spanish_ci'}, {collecte{utf8_spanish_ci}}... ne fonctionneront pas et afficheront une erreur php.
Il n’est possible de l’utiliser que par #GET{} après l’avoir préalablement déclaré en #SET{}

Notes

[1Voir la documentation officielle pour la clause « COLLATE » de Mysql : http://dev.mysql.com/doc/refman/5.0... et : Un exemple de l’effet de collation

[2Dans le jeu de caractère latin1, 8 collations sont accessibles :

| COLLATION_NAME | CHARACTER_SET_NAME | | latin1_bin | latin1 | | latin1_danish_ci | latin1 | | latin1_general_ci | latin1 | | latin1_general_cs | latin1 | | latin1_german1_ci | latin1 | | latin1_german2_ci | latin1 | | latin1_spanish_ci | latin1 | | latin1_swedish_ci | latin1 |


Voir le squelette de cette page Site réalisé avec SPIP | Espace de traduction | Espace privé