=> tri

Bonjour,

je me trouve tout bete a bloquer sur un probleme de tri

je veux trier une table sur un champ d’une autre table

il s’agit d’afficher les projets d’un utilisateur dans l’ordre ou il les a consulte (historique de navigation)

  1. je ne peux pas utiliser la commande TRIER puisque mon lien-aller n’est pas dans le bon sens

[]21443455;“Your comment here…”[/]

  1. la commande CHERCHER PAR TABLEAU me ramene les enregistrements dans le desordre meme si le tableau passe en parametre est trie

  2. je cherche une solution avec une requete SQL
    mais comment passer d’une selection SQL triee (un tableau d’id) a une “vraie” selection 4D ?

Ca devrait etre possible avec un trier par formule…

oui, ca marche avec TRIER PAR FORMULE, merci

je n’utilise jamais cette commande, je n’y avais pas pense, je n’ai trouve qu’un appel a cette commande dans ma base, une methode ecrite en 2004 !! :slight_smile:

pour en revenir a mon point 3) souvent j’ai envie d’utiliser la souplesse des reqetes SQL (pouvoir parentheser dans la clause WHERE ou utiliser les jointures) mais au final travailler avec une “vraie” selection 4D

comment passer de l’un a l’autre ?

Moi j’en ai une trentaine d’occurrences…

Dans un contexte similaire, j’ai construit deux tableaux, l’un avec le critere de tri (le ts le plus recent dans ton cas), l’autre avec l’id servant au lien, et je ferais :

Trier par formule([Projets];$tTS{Chercher dans tableau($tRef;[Projets]Id)};>)

Attention a ne surtout pas faire le tri quand il n’y a qu’un seul projet dans la selection, 4D quitte sauvagement !

Mais sinon ca marche impec.

Concernant SQL, a chaque fois que j’ai essaye de l’utiliser dans des cas tordus c’etait beaucoup plus lent qu’avec du 4D pur, du coup pour l’instant je ne l’utilise pas du tout !

Bonne soiree !
Jacques

: Jean Philippe MATTON

comment passer de l’un a l’autre ?
Je pense que tu peux collecter dans la requete SQL les http://doc.4d.com/4Dv16R4/4D/16-R4/A-propos-des-numeros-d-enregistrements.300-3317462.fr.htmlnumeros d’enregistrements> via le champ http://doc.4d.com/4Dv16R4/4D/16-R4/Replication-via-le-SQL.300-3451017.fr.html__ROW_ID>. Apres quoi executer http://doc.4d.com/4Dv16R4/4D/16-R4/CREER-SELECTION-SUR-TABLEAU.301-3316950.fr.htmlCreer selection sur tableau> (ultra rapide.)

Verification faite, ca marche :
<code 4D>
TABLEAU TEXTE($nom_at;0)
TABLEAU ENTIER LONG($rec_al;0)
Debut SQL
SELECT Nom, __ROW_ID
FROM Personne
WHERE Nom LIKE ‘AB%’
INTO :$nom_at, :$rec_al;
Fin SQL
TRIER TABLEAU($nom_at;$rec_al;>) //tri par nom
CREER SELECTION SUR TABLEAU([Personne];$rec_al) //selection triee par nom
</code 4D>

merci beaucoup Arnaud ! je vais tester cela