DISTINCT et ORDER BY - SQL/NoSQL - Programmation
Marsh Posté le 30-10-2008 à 15:46:24
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.
Marsh Posté le 30-10-2008 à 15:54:18
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 !
Marsh Posté le 30-10-2008 à 15:55:33
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 :
|
et si tu n'utilises pas val_min ben tu l'affiches pas, c'est tout
Marsh Posté le 30-10-2008 à 16:03:53
Merci Casimimir !
J'etais en train de chercher de ce coté (requete imbriquée). j'essaye ca et je renvoie le resultat
Marsh Posté le 30-10-2008 à 16:15:07
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...
Marsh Posté le 30-10-2008 à 16:30:33
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
Marsh Posté le 30-10-2008 à 16:36:22
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
Marsh Posté le 30-10-2008 à 16:50:59
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...
Marsh Posté le 30-10-2008 à 17:02:58
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é
Marsh Posté le 30-10-2008 à 17:31:20
ta requete est égale a
Code :
|
Marsh Posté le 30-10-2008 à 17:33:35
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
Marsh Posté le 30-10-2008 à 17:51:25
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é
Marsh Posté le 30-10-2008 à 17:54:19
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 !
Marsh Posté le 31-10-2008 à 11:48:28
A priori on peut, aussi, écrire ceci :
Code :
|
Marsh Posté le 03-11-2008 à 14:18:52
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...
Marsh Posté le 03-11-2008 à 14:21:38
Après ça depends aussi du SGBD.
Marsh Posté le 03-11-2008 à 14:33:15
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 !
Marsh Posté le 03-11-2008 à 14:40:16
Bah disons que j'avais jamais testé en MySQL donc c'était au cas où.
Car c'est plus simple syntaxiquement .
Marsh Posté le 30-10-2008 à 15:26:21
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