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.

13.13.3.8 Voir aussi

×