Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1729 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  DISTINCT et ORDER BY

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

DISTINCT et ORDER BY

n°1806399
maskleouf
pas d'bol Paul
Posté le 30-10-2008 à 15:26:21  profilanswer
 

Bonjour a tous !
 
Je me lance dans la programmation php, MySQL et compagnie... et donc, j'ai un probleme.
 
Je souhaiterais sortir une liste de numero et son id classé par ordre croissant d'un autre numero sans afficher le second numero, et sans doublons
 
ex: table : truc
 
 fact         val
5684       2554
12          78522
12           445
725         669
12           444
778        78522
3            2554
725         7898
 
 
SELECT DISTINCT fact FROM truc ORDER BY val
 
il me dit que ca marche pas (le champ val doit aparaitre dans la reponse a la requete pour qu'il classe par val)
 
SELECT DISTINCT fact, val FROM truc ORDER BY val
 
il me renvoie trop de valeur !! je ne veux que le fact en distinct, pas l'association fact et val...
 
je voudrais qu'il me renvoie :
 
fact
 
12
725
3
5684
778
 
je crois avoir croisé du regard a peu pret tout les forums et documentation que je pouvais comprendre (francais, anglais, allemand et espagnol... peut etre qu'un slovene a la reponse... mais je comprend pas le slovene...)
 
Si qqun a la solution... Merci d'avance  
 
Bonne journée

mood
Publicité
Posté le 30-10-2008 à 15:26:21  profilanswer
 

n°1806410
aideinfo
Posté le 30-10-2008 à 15:46:24  profilanswer
 

Tu ne peux pas faire un tri sur des données que tu ne connais pas, donc normal. A noter que DISTINCT supprime les vrais doublons, ce qui n'est pas le cas là. Il faut faire un traitement en PHP.


---------------
http://www.aideinfo.com/  Whois adresses IP/domaines le plus évolué !!  FAQ Free Mobile
n°1806419
maskleouf
pas d'bol Paul
Posté le 30-10-2008 à 15:54:18  profilanswer
 

aideinfo a écrit :

Tu ne peux pas faire un tri sur des données que tu ne connais pas, donc normal. A noter que DISTINCT supprime les vrais doublons, ce qui n'est pas le cas là. Il faut faire un traitement en PHP.


 
Merci !
 
Par contre, Objection votre honneur !!! je connais les valeurs, je voudrais juste ne pas les afficher car cela m'affiche plus des doublons dans la colonne fact... Or, je veux juste une occurence de chaque fact, pas 2, sinon ma requete va faire des doublons dans mon affichage !
 
 
merci qd mem !

n°1806422
casimimir
Posté le 30-10-2008 à 15:55:33  profilanswer
 

ca n'a pas de sens ton truc, si on prend ton exemple, 12 a 3 val différents, tu utilises leque pour faire ton classement?
 
12          78522
12           445
12           444  
 
ce que tu veux sans doute sans trop le savoir c'est un truc style
 

Code :
  1. select fact,val_min
  2. from
  3. (select fact,min(val) as val_min
  4. from brlbrl
  5. group by fact)
  6. order by val_min


 
et si tu n'utilises pas val_min ben tu l'affiches pas, c'est tout

n°1806426
maskleouf
pas d'bol Paul
Posté le 30-10-2008 à 16:03:53  profilanswer
 

Merci Casimimir !
J'etais en train de chercher de ce coté (requete imbriquée). j'essaye ca et je renvoie le resultat

n°1806441
maskleouf
pas d'bol Paul
Posté le 30-10-2008 à 16:15:07  profilanswer
 

En fait, j'approfondis mon explication :
je veut retirer une liste de numero de facture ayant un critere
dans ma table, j'ai des numeros de facture en double, triple voir plus (paiement en plusieurs fois). Moi, je veux une liste des factures classée par date dans une table. Or les factures de paiement en plusieurs fois risque d'apparaitre plusieurs fois (plusieurs ligne dans la reponse a ma requete). Donc avec un distinct, je regle le probleme... mai je ne peux plu classer par date ou je perd le distinct...
En gros, j'ai le choix entre la bonne liste pas dans le bon ordre, et une liste pas bonne dans l'ordre...  
je sais pas si c'est plus clair... mais hésitez pas a me demander ce que vous ne comprenez pas...


Message édité par maskleouf le 30-10-2008 à 16:18:01
n°1806446
maskleouf
pas d'bol Paul
Posté le 30-10-2008 à 16:30:33  profilanswer
 

RE... (je fais mon sujet tout seul)
 
SELECT fact, dated  
FROM (
   SELECT DISTINCT fact  
   FROM lfixe  
   WHERE struc = 'Pour les essais'  
   AND datef >24100)
ORDER BY dated
 
et ca me renvoie a mes jeunes années (des trucs que je faisais avant) et a une erreur => #1248 - Every derived table must have its own alias


Message édité par maskleouf le 30-10-2008 à 16:31:16
n°1806455
casimimir
Posté le 30-10-2008 à 16:36:22  profilanswer
 

faut juste lire le message, manifestement il te dit que tu dois nommer (donner un alias) a ta table dérivée (le select se trouvant entre parenthèse).
 
donc rajoute un "as qquechose" ou "qquechosetoutcourt" (je connais pas mysql) après la parenthèse

n°1806469
maskleouf
pas d'bol Paul
Posté le 30-10-2008 à 16:50:59  profilanswer
 

Merci.
 
Je suis en train d'essayer toutes les syntaxes possibles mais rien...
quand il ne me demande pas d'alias, il me dit que j'ai fai une erreur de syntaxe... MySQL... Mon amour...

n°1806479
maskleouf
pas d'bol Paul
Posté le 30-10-2008 à 17:02:58  profilanswer
 

Bon bah , je crois que j'ai trouvé...
 
La solution se trouve du coté des requetes imbriquées...
 
SELECT DISTINCT fact
FROM (
   SELECT fact, val
   FROM truc
   ORDER BY val
) t   (<------- c'est avec ce t qu'on fait l'alias)
 
Merci a ceux qui ont participé

mood
Publicité
Posté le 30-10-2008 à 17:02:58  profilanswer
 

n°1806517
casimimir
Posté le 30-10-2008 à 17:31:20  profilanswer
 

ta requete est égale a  
 

Code :
  1. select distinct fact
  2. from truc

n°1806520
maskleouf
pas d'bol Paul
Posté le 30-10-2008 à 17:33:35  profilanswer
 

pas exactement, passke avec ce que tu a dis, tu a pas les fact dans l'ordre des val.  
 
En gros, ma requete, elle met la table dans l'ordre, et apres, elle lit les fact

n°1806537
casimimir
Posté le 30-10-2008 à 17:51:25  profilanswer
 

ca c'est ce que tu crois, on ne peut jamais se fier a l'ordre des lignes sans un order by explicite.
 
la bonne méthode est celle que je t'ai donné

n°1806541
maskleouf
pas d'bol Paul
Posté le 30-10-2008 à 17:54:19  profilanswer
 

tout a fait daccord, on peut pas etre sur. Mais ca marche quand meme !
je vien de le faire sur une 4 tables de plus de 40 lignes chacune, et pas une erreur...
 
ta methode fonctionne aussi tres bien et elle est plus sure... mais, je suis tres "c'est moi qui l'ai fait" si tu vois ce que je veux dire.  
 
En tout cas, je te remercie beaucoup de ton aide !

n°1806833
MEI
|DarthPingoo(tm)|
Posté le 31-10-2008 à 11:48:28  profilanswer
 

A priori on peut, aussi, écrire ceci :
 

Code :
  1. select distinct(T.FACT), T.VAL
  2. from TRUC T
  3. order by T.VAL;



---------------
| AMD Ryzen 7 7700X 8C/16T @ 4.5-5.4GHz - 64GB DDR5-6000 30-40-40 1T - AMD Radeon RX 7900 XTX 24GB @ 2680MHz/20Gbps |
n°1807693
maskleouf
pas d'bol Paul
Posté le 03-11-2008 à 14:18:52  profilanswer
 

Bah non... soit je me suis planté, soit ca marche pas... j'ai l'impression que le distinct avec les parentheses... et bah les parentheses, autant pisser dans un violon...

n°1807694
MEI
|DarthPingoo(tm)|
Posté le 03-11-2008 à 14:21:38  profilanswer
 

Après ça depends aussi du SGBD.


---------------
| AMD Ryzen 7 7700X 8C/16T @ 4.5-5.4GHz - 64GB DDR5-6000 30-40-40 1T - AMD Radeon RX 7900 XTX 24GB @ 2680MHz/20Gbps |
n°1807703
maskleouf
pas d'bol Paul
Posté le 03-11-2008 à 14:33:15  profilanswer
 

bah c'est du MySQL (j'avais précisé au depart). Je crois que ta methode fonctionne en Access et PostgreSQL... mais le MySQL se moque eperduement des parentheses !
Merci quand meme de ta participation !

n°1807707
MEI
|DarthPingoo(tm)|
Posté le 03-11-2008 à 14:40:16  profilanswer
 

Bah disons que j'avais jamais testé en MySQL donc c'était au cas où.
Car c'est plus simple syntaxiquement ;).


---------------
| AMD Ryzen 7 7700X 8C/16T @ 4.5-5.4GHz - 64GB DDR5-6000 30-40-40 1T - AMD Radeon RX 7900 XTX 24GB @ 2680MHz/20Gbps |

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  DISTINCT et ORDER BY

 

Sujets relatifs
Requete SQL avec GROUP BY problemeQuestion simple sur DELETE, LIMIT et ORDER BY
probleme requete jointure et distinctPlusieurs Count et Group By sur une table
[résolu]Jointure externe et GROUP BY[Résolu] Order By et Union
[MySql] requete group by + order by { RESOLU }[RESOLU]SELECT MAX avec GROUP BY
Plus de sujets relatifs à : DISTINCT et ORDER BY


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR