|
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 ? |
| |
| |
| | | |
|
| | | | |
| | |
|