13.13.3 SearchDoc::setOrder()
Les résultats de la recherche peuvent être ordonnés à l'aide de la méthode
"setOrder()" qui permet de spécifier les attributs en fonction desquels seront
triés les résultats.
13.13.3.1 Description
void setOrder ( string $order, string $orderbyLabel = '' )
13.13.3.1.1 Avertissements
Cette fonction ne produit pas de message d'erreurs si les attributs passés ne sont pas valides.
13.13.3.2 Liste des paramètres
- (string)
order
- une chaîne de caractères contenant la liste des colonnes (séparées par une virgule) en fonction desquelles le résultat est ordonné. Le nom des colonnes peut être suffixé par un espace et le mot-clef 'asc' ou 'desc' afin de spécifier l'ordre du tri : ASCendant ou DESCendant (par défaut, la colonne est triée dans l'ordre ASCendant).
- (string)
orderbyLabel
- une chaîne de caractères contenant le nom d'une des colonnes spécifiées dans
l'argument #1 (sans le suffixe de tri 'asc' ou 'desc') et pour laquelle le
tri doit être fait non pas sur la valeur de l'attribut, mais sur le label
ou le titre. Les attributs actuellement supportés pour l'ordonnancement par
le label ou le titre sont : Les attributs de type
enum
.
Les attributs de type 'docid("X")' déclarés avec une option 'doctitle=auto' ou 'doctitle=xxx'.
Pour les énumérés, les libellés peuvent être différents suivant la locale. L'ordre est alors différent suivant la langue choisie lors de la connexion de l'utilisateur.
13.13.3.3 Valeur de retour
Aucune.
13.13.3.4 Erreurs / Exceptions
Aucune.
13.13.3.5 Historique
Aucun.
13.13.3.6 Exemples
13.13.3.6.1 Exemple de tri en fonction d'un attribut entier :
$searchDoc=new searchDoc($dbaccess, $famId); $searchDoc->setOrder("a_integer desc"); $searchDoc->search();
13.13.3.6.2 Exemple de tri en fonction de deux attributs :
$searchDoc=new searchDoc($dbaccess, $famId); $searchDoc->setOrder("a_integer desc, b_date asc"); $searchDoc->search();
13.13.3.6.3 Exemple de tri en fonction de la valeur d'un énuméré :
$searchDoc=new searchDoc($dbaccess, $famId); $searchDoc->setOrder("a_enum asc"); $searchDoc->search();
13.13.3.6.4 Exemple de tri en fonction du label d'un énuméré :
$searchDoc=new searchDoc($dbaccess, $famId); $searchDoc->setOrder("a_enum asc", "a_enum"); $searchDoc->search();
Dans les exemples ci-dessus, si l'énuméré 'a_enum' est définit avec
1|Accepté,2|Traité,3|Rejeté,4|Clos
, alors les documents sont retournés dans
l'ordre ci-dessous :
setOrder("a_enum") | setOrder("a_enum", "a_enum") |
---|---|
1-Accepté | 1-Accepté |
2-Traité | 4-Clos |
3-Rejeté | 3-Rejeté |
4-Clos | 2-Traité |
13.13.3.6.5 Exemple de tri avec ou sans la fonction de orderBy
:
L'énuméré an_sexe
a comme définition : M|Masculin,F|Zéminin,H|Hermaphorodite
.
function testOfOrderBy(Action & $action) { header('Content-Type: text/plain'); $searchDoc = new searchDoc("", "ZOO_ANIMAL"); $searchDoc->setObjectReturn(); print "Without orderby\n"; foreach ($searchDoc->getDocumentList() as $document) { printf("Title : %s \n\t sexe : %s \n", $document->getTitle(), $document->getTextualAttrValue("an_sexe")); } var_export($searchDoc->getSearchInfo()); print "\n***************\nOrder by without orderbyLabel\n"; $searchDoc->setOrder("an_sexe"); $searchDoc->reset(); foreach ($searchDoc->getDocumentList() as $document) { printf("Title : %s \n\t sexe : %s \n", $document->getTitle(), $document->getTextualAttrValue("an_sexe")); } var_export($searchDoc->getSearchInfo()); print "\n***************\nOrder by with orderbyLabel\n"; $searchDoc->setOrder("an_sexe", "an_sexe"); $searchDoc->reset(); foreach ($searchDoc->getDocumentList() as $document) { printf("Title : %s \n\t sexe : %s \n", $document->getTitle(), $document->getTextualAttrValue("an_sexe")); } var_export($searchDoc->getSearchInfo()); }
Résultat :
Without orderby Title : Rotor sexe : Masculin Title : Séléonore sexe : Zéminin Title : Théodor sexe : Masculin array ( 'count' => 3, 'query' => 'select doc1058.id, owner, title, revision, version, initid, fromid, doctype, locked, allocated, archiveid, icon, lmodify, profid, usefor, cdate, adate, revdate, comment, classname, state, wid, postitid, domainid, lockdomainid, cvid, name, dprofid, views, atags, prelid, confidential, ldapdn, an_nom, an_tatouage, an_espece, an_espece_title, an_ordre, an_classe, an_sexe, an_photo, an_gardien, an_naissance, an_entree, an_enfant, an_pere, an_mere, an_classe_title, an_pere_title, an_mere_title, values, attrids from doc1058 where (doc1058.archiveid is null) and (doc1058.doctype != \'T\') and (doc1058.locked != -1) ORDER BY title LIMIT ALL OFFSET 0;', 'error' => '', 'delay' => '0.005s', ) *************** Order by without orderbyLabel Title : Séléonore sexe : Zéminin Title : Rotor sexe : Masculin Title : Théodor sexe : Masculin array ( 'count' => 3, 'query' => 'select doc1058.id, owner, title, revision, version, initid, fromid, doctype, locked, allocated, archiveid, icon, lmodify, profid, usefor, cdate, adate, revdate, comment, classname, state, wid, postitid, domainid, lockdomainid, cvid, name, dprofid, views, atags, prelid, confidential, ldapdn, an_nom, an_tatouage, an_espece, an_espece_title, an_ordre, an_classe, an_sexe, an_photo, an_gardien, an_naissance, an_entree, an_enfant, an_pere, an_mere, an_classe_title, an_pere_title, an_mere_title, values, attrids from doc1058 where (doc1058.archiveid is null) and (doc1058.doctype != \'T\') and (doc1058.locked != -1) ORDER BY an_sexe LIMIT ALL OFFSET 0;', 'error' => '', 'delay' => '0.003s', ) *************** Order by with orderbyLabel Title : Rotor sexe : Masculin Title : Théodor sexe : Masculin Title : Séléonore sexe : Zéminin array ( 'count' => 3, 'query' => 'select doc1058.id, owner, title, revision, version, initid, fromid, doctype, locked, allocated, archiveid, icon, lmodify, profid, usefor, cdate, adate, revdate, comment, classname, state, wid, postitid, domainid, lockdomainid, cvid, name, dprofid, views, atags, prelid, confidential, ldapdn, an_nom, an_tatouage, an_espece, an_espece_title, an_ordre, an_classe, an_sexe, an_photo, an_gardien, an_naissance, an_entree, an_enfant, an_pere, an_mere, an_classe_title, an_pere_title, an_mere_title, values, attrids from doc1058 , (VALUES (\'M\', \'Masculin\'), (\'F\', \'Zéminin\'), (\'H\', \'Hermaphrodite\')) AS map_an_sexe(key, label) where (map_an_sexe.key = doc1058.an_sexe) and (doc1058.archiveid is null) and (doc1058.doctype != \'T\') and (doc1058.locked != -1) ORDER BY map_an_sexe.label LIMIT ALL OFFSET 0;', 'error' => '', 'delay' => '0.002s', )
13.13.3.7 Notes
Les colonnes de tri sont des noms d'attributs ou de propriétés de documents.