PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WEBDEV 2024 → Requête avec DISTINCT mais sans tri ni regroupement : quel ordre ?
Requête avec DISTINCT mais sans tri ni regroupement : quel ordre ?
Débuté par Pampi, 24 oct. 2014 09:45 - 8 réponses
Posté le 24 octobre 2014 - 09:45
Bonjour,

Voici un exemple de données contenues dans les rubriques ID (identifiant automatique), LIB et VAL d'un fichier FIC :

ID LIB VAL
--------------------------
1 LIBZZZZ X
2 LIBBBBB X
3 LIBCCCC X
4 LIBAAAA X
5 LIBCCCC X
6 LIBZZZZ X
7 LIBBBBB X

Si j'effectue la requête suivante :

SELECT DISTINCT LIB FROM FIC WHERE Val='X'


puis-je être certain de mon ordre d'affichage du résultat ?

En effet :

- pour un projet en dynamique php, le résultat est : LIBAAAA, LIBBBBB, LIBCCCC, LIBZZZZ (ordre alphabétique)
- pour un projet en dynamique Webdev, le résultat est : LIBZZZZ, LIBBBBB, LIBCCCC, LIBAAAA (ordre identifiant)

Merci par avance pour votre aide.

Bon dév.

Pampi
Membre enregistré
85 messages
Popularité : +1 (1 vote)
Posté le 24 octobre 2014 - 14:57
Bonjour Pampi,

Si tu veux être certain de récupérer toujours le même résultat, il faut imposer un tri dans ta requête

SELECT DISTINCT LIB FROM FIC WHERE Val='X' ORDER by LIB


De cette façon, ton résultat sera toujours trié par ordre alphabétique.

Cordialement,

Delphine
Posté le 30 octobre 2014 - 09:27
Bonjour Delphine et merci pour ta réponse.

Malheureusement, l'ordre qui m'intéresse est l'ordre chronologique de création (identifiant automatique) car je veux faire afficher les résultats du plus ancien au plus récent (le 1er créé est un LIBZZZZ , le 2ème est un LIBBBBB, le 3ème est un LIBCCCC et le 4ème est un LIBAAAA.
Je ne peux pas utiliser de critère de tri sur l'ID puisque ID n'est pas une rubrique affichée...

Ma question est donc : si je ne précise rien, l'ordre pris en compte est-il systématiquement l'ID (ce qui semble être le cas en WebDev), LIB (ce qui semble le cas en Php) ou aléatoire ?

Merci encore pour ton aide.

Bon dév.
Membre enregistré
218 messages
Popularité : +8 (8 votes)
Posté le 03 novembre 2014 - 18:13
Bonjour Pampi,

Je ne peux répondre pour Hyperfile, que je n'utilise pas.

Mais de mon expérience tirée de SGBD comme SqlServer, Oracle, Ingres, PostgreSQL et MySQL, je ne peux donner qu'une réponse : comme aurait dit Fernand Raynaud, ça dépend s'il y a du vent. Tu ne peux te fier à rien.

Bon, le vent, tu peux oublier. ;) Mais le résultat dépendra de l'ordre des informations sur le disque, qui lui-même sera influencé par la gestion des trous générés par les suppressions de données, il peut dépendre aussi des jointures, des indexes, de la manière dont les requêtes sont écrites, des verrous peut-être... Au final, on ne peut jamais rien prévoir.

C'est pourquoi j'ai pris l'habitude, quand je sais qu'il me faudra sortir un jour les informations en mode chronologique, de toujours ajouter une colonne date et une colonne heure dans la table. Ainsi, je sais que je pourrai toujours m'y référer. Parce que même l'ID automatique peut être sujet à caution (par exemple dans le cas de bases de données faisant l'objet d'une réplication de fusion).
Membre enregistré
150 messages
Popularité : +8 (8 votes)
Posté le 05 novembre 2014 - 08:33
Bonjour Jean-Gabriel,

Merci, pour ta réponse, tu es un ange. ;)

Je n'ai pu pour l'instant tester en WB que 1 fois sur un seul exemple et l'ordre des identifiants a été respecté.
Dès que que je pourrai à nouveau m'y pencher je regarderai si c'est systématique ou aléatoire comme tu le sous-entend.
J'ai également proposé aux utilisateurs d'ajouter un n° devant les libellés (ce sont des leçons, donc ça pourrait être adopté puisqu'il y a bien un ordre) ce qui me permettrait de trier par libellé.
Pour les colonnes date et heure, ça ne me servirait à rien puisque je veux regrouper par libellé, donc ne pas faire afficher date et heure, donc ne pas pouvoir les utiliser dans les tri...

Merci encore pour ton aide.

Bon dév.
Posté le 05 novembre 2014 - 14:41
Bonjour

tu as l'air de penser que les rubriques utilisées pour l'ordre DOIVENT
être affichées. Hors ce n'est pas du t out le cas. Il faut juste
qu'elles fassent parti de la requête. Ensuite elles PEUVENT être affichées.

Donc, que tu utilise date/heure ou un numéro d'ordre de tri d'affichage
dans ton fichier, tu peux toujours n'afficher que le nom, et être
tranquille.

Cordialement


--
Fabrice Harari
Consultant WinDev, WebDev et WinDev Mobile International

NOUVEAU: WXReplication, votre système de réplication open source est
disponible sur mon site web !!!
WXShowroom.com : Montrez vos projets !
Plus d'information sur http://fabriceharari.com


On 11/5/2014 1:33 AM, Pampi wrote:
Bonjour Jean-Gabriel,

Merci, pour ta réponse, tu es un ange. ;)

Je n'ai pu pour l'instant tester en WB que 1 fois sur un seul exemple et
l'ordre des identifiants a été respecté.
Dès que que je pourrai à nouveau m'y pencher je regarderai si c'est
systématique ou aléatoire comme tu le sous-entend.
J'ai également proposé aux utilisateurs d'ajouter un n° devant les
libellés (ce sont des leçons, donc ça pourrait être adopté puisqu'il y a
bien un ordre) ce qui me permettrait de trier par libellé.
Pour les colonnes date et heure, ça ne me servirait à rien puisque je
veux regrouper par libellé, donc ne pas faire afficher date et heure,
donc ne pas pouvoir les utiliser dans les tri...

Merci encore pour ton aide.

Bon dév.
Membre enregistré
150 messages
Popularité : +8 (8 votes)
Posté le 27 novembre 2014 - 09:37
Bonjour Fabrice,

Merci pour ta réponse, je pense simplement que l'on a une incompréhension d'un point de vue vocabulaire... Qu'entends-tu par "rubriques utilisées", "affichées", "fassent partie" ?
A moins que je me trompe, on ne peut pas utiliser une rubrique dans la partie ORDER BY si celle-ci ne fait pas partie du SELECT.
Or, dans mon SELECT je ne veux que le libellé (avec DISTINCT pour les regrouper), je ne peux donc pas trier par une autre rubrique que le libellé...

Merci.
Posté le 27 novembre 2014 - 12:51
Bonjour

la vrai question est POURQUOI "> Or, dans mon SELECT je ne veux que le
libellé "

Tu as besoin d'une autre rubrique pour trier, tu la mets aussi dans le
select, et ca ne pose AUCUN problème.

Cordialement


--
Fabrice Harari
Consultant WinDev, WebDev et WinDev Mobile International

NOUVEAU: WXReplication, votre système de réplication open source est
disponible sur mon site web !!!
WXShowroom.com : Montrez vos projets !
Plus d'information sur http://fabriceharari.com


On 11/27/2014 3:37 AM, Pampi wrote:
Bonjour Fabrice,

Merci pour ta réponse, je pense simplement que l'on a une
incompréhension d'un point de vue vocabulaire... Qu'entends-tu par
"rubriques utilisées", "affichées", "fassent partie" ?
A moins que je me trompe, on ne peut pas utiliser une rubrique dans la
partie ORDER BY si celle-ci ne fait pas partie du SELECT.
Or, dans mon SELECT je ne veux que le libellé (avec DISTINCT pour les
regrouper), je ne peux donc pas trier par une autre rubrique que le
libellé...

Merci.
Posté le 28 novembre 2014 - 12:18
A moins que je me trompe, on ne peut pas utiliser une rubrique dans la partie
ORDER BY si celle-ci ne fait pas partie du SELECT.


en hf je ne sais pas. (et ce serait idiot)
en sql standard, certainement pas.

select client.nom from mesclient order by date_creat desc limit 10

je veux mes 10 derniers clients créés par exemple. Quelle besoin de
mettre date_creat dans les zones de mon select ?