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

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [mysql] recherche "distinct"

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[mysql] recherche "distinct"

n°1267072
gravastar_​bureau
vive la mise en page en tab...
Posté le 15-12-2005 à 11:50:27  profilanswer
 

Bonjour tout le monde,
 
Je vais poser une question idiote, mais si je ne le fais pas je vais rester ignare toute ma vie :
Je souhaiterais enlever les doublons des résultats de ma requête. Je fais donc la requête suivante :

Code :
  1. SELECT DISTINCT nom_prod FROM mstore_produits WHERE (nom_prod LIKE 'whatever' OR desc_prod_fr LIKE 'whatever')


Cependant, j'aimerais retourner tous les champs des objets mstore_produits trouvés. Faut-il que je passe par une deuxième requête ou y a-t-il un moyen de le faire directement en une seule requête (du genre SELECT *, DISTINCT nom_prod ... je sais ça ne fonctionne pas).
 
Voila, merci d'avance.

mood
Publicité
Posté le 15-12-2005 à 11:50:27  profilanswer
 

n°1267081
cinocks
Posté le 15-12-2005 à 11:56:55  profilanswer
 

bah tu rajoutes les champs que tu veux.
 
le distinct est une option qui s'applique à tous les champs du SELECT. Le requeteur va d'abord recuperer les enregistrements, et supprimer les doublons ensuite.


---------------
MZP est de retour
n°1267093
gravastar_​bureau
vive la mise en page en tab...
Posté le 15-12-2005 à 12:03:51  profilanswer
 

cinocks a écrit :

bah tu rajoutes les champs que tu veux.
 
le distinct est une option qui s'applique à tous les champs du SELECT. Le requeteur va d'abord recuperer les enregistrements, et supprimer les doublons ensuite.


 
En fait je veux que le distinct ne s'applique qu'au champ nom_prod :/
Bon, je viens de lire que de toute façon la méthode "distinct" sent l'égout (dixit http://www.databasejournal.com/fea [...] hp/3437821 )
Pourquoi je me suis laissé embarquer dans les bases de données o_O

n°1267123
Arjuna
Aircraft Ident.: F-MBSD
Posté le 15-12-2005 à 12:23:23  profilanswer
 

les like c'est pire que les distinct, donc tu vas aussi nous faire le plaisir d'utiliser FULLTEXT SEARCH :p

n°1267130
gravastar_​bureau
vive la mise en page en tab...
Posté le 15-12-2005 à 12:26:06  profilanswer
 

Arjuna a écrit :

les like c'est pire que les distinct, donc tu vas aussi nous faire le plaisir d'utiliser FULLTEXT SEARCH :p


 
damned ! ^^
bon OK je sors, je recherche et je reviens  :D

n°1267131
Arjuna
Aircraft Ident.: F-MBSD
Posté le 15-12-2005 à 12:26:51  profilanswer
 

va pas trop loin non plus, parceque les index sur texte, c'est quand même un peu compliqué, et ça résoudra pas forcément ton problème de distinct ;)

n°1267135
gravastar_​bureau
vive la mise en page en tab...
Posté le 15-12-2005 à 12:35:16  profilanswer
 

Arjuna a écrit :

va pas trop loin non plus, parceque les index sur texte, c'est quand même un peu compliqué, et ça résoudra pas forcément ton problème de distinct ;)


 
hmm bon.. alors ça m'a l'air tout à fait passionnant, voir épanouissant comme sujet et je ne doute pas que je passerais un petit peu de temps dessus dès que mon boss arrêtera de me taper dessus ^^
 
Sinon, pour ma question du début, vous auriez des pistes à me donner ? une toute petite piste ? please ? s'il vous plait ?

n°1267140
Arjuna
Aircraft Ident.: F-MBSD
Posté le 15-12-2005 à 12:36:21  profilanswer
 

c'est quoi la question en fait ? parceque c'est pas clair :D

n°1267142
Arjuna
Aircraft Ident.: F-MBSD
Posté le 15-12-2005 à 12:36:56  profilanswer
 

y'a quoi dans ta base, tu veux trouver quoi ?

n°1267145
cinocks
Posté le 15-12-2005 à 12:37:37  profilanswer
 

gravastar_bureau a écrit :

En fait je veux que le distinct ne s'applique qu'au champ nom_prod :/
Bon, je viens de lire que de toute façon la méthode "distinct" sent l'égout (dixit http://www.databasejournal.com/fea [...] hp/3437821 )
Pourquoi je me suis laissé embarquer dans les bases de données o_O


 
Euh le distinct ne sent pas l'egout. Il a une fonction, c'est tout.  


---------------
MZP est de retour
mood
Publicité
Posté le 15-12-2005 à 12:37:37  profilanswer
 

n°1267149
Arjuna
Aircraft Ident.: F-MBSD
Posté le 15-12-2005 à 12:39:25  profilanswer
 

comme le like : on s'en sert que si on est menacé de malédiction sur les 10 génération à venir par un nain voodoo venant de l'espace :o

n°1267150
cinocks
Posté le 15-12-2005 à 12:40:39  profilanswer
 

le like, la commande qui depanne quand on cherche quelque chose, mais que l'on ne doit jamais voir dans un script :lol:
 


---------------
MZP est de retour
n°1267162
gravastar_​bureau
vive la mise en page en tab...
Posté le 15-12-2005 à 12:47:30  profilanswer
 

Arjuna a écrit :

y'a quoi dans ta base, tu veux trouver quoi ?


 
Alors, dans ma base j'ai la table mstore_produits sur laquelle je fais mes tests pour trouver mes instances (si je dis un mot de travers tapez pas trop fort, c'est parce qu'à la base ce n'est pas tout à fait mon domaine).
 
mstore_produits
ref_prod
nom_prod
desc_prod
url_photo
prix
ref_categorie
modele
date_ajout
stock
promo
theme
prix_vert
valid
delai_livraison
ref_constructeur
 
Nous avons déjà un "moteur de recherche" (riez pas trop fort, la personne qui a programmé ça n'est pas là et il ne faut pas se moquer des absents) qui renvoie toutes les instances correspondant (soit dans nom_prod, soit dans desc_prod) à la chaine de caractères entrée. Ce que l'on m'a demandé de faire c'est d'enlever les doublons (et d'améliorer la présentation, ça c'est mon travail) retournés par ce moteur.
Le moyen d'enlever les doublons pour moi c'était de faire un distinct sur le champ nom_prod.
Ce que je dois retourner c'est des instances de la table mstore_produits (tous les champs quoi) correspondant à la recherche.
 
Ai-je été plus clair ?

n°1267201
cinocks
Posté le 15-12-2005 à 13:20:54  profilanswer
 

tu ne veux pas que nom produit soit present plus d'une fois


---------------
MZP est de retour
n°1267215
Tamahome
⭐⭐⭐⭐⭐
Posté le 15-12-2005 à 13:31:24  profilanswer
 

Arjuna a écrit :

comme le like : on s'en sert que si on est menacé de malédiction sur les 10 génération à venir par un nain voodoo venant de l'espace :o


 
n'importe quoi... il y a des cas (rare mais ils existent) ou le distinct est absolument obligatoire...


---------------
Hobby eien /人◕ ‿‿ ◕人\
n°1267275
Arjuna
Aircraft Ident.: F-MBSD
Posté le 15-12-2005 à 14:01:38  profilanswer
 

gravastar_ bureau > arrête pas parler "d'instances", parle de "produits", puisque c'est ce que tu as dans ta table. ça au moins ça parle à tout le monde, même à un enfant de 6 ans ;)
sinon, si je comprends bien, le moteur actuellement renvoie plusieurs références produit différentes, qui ont le même nom de produit.
 
c'est bien ça ?
si c'est ça, alors c'est là qu'il faut creuser un peu : c'est pas normal.
 
ensuite, tu fais quoi si t'as un produit "PRD1" et un produit "PRD2" qui s'appelle tous les deux "mon produit" ? tu décides comment duquel afficher ?

n°1267285
Arjuna
Aircraft Ident.: F-MBSD
Posté le 15-12-2005 à 14:04:01  profilanswer
 

Tamahome > ben justement, la menace de se faire désintégrer par un nain voodoo venu de l'espace est un des rares cas où il est autorisé d'utiliser distinct.
 
Pour le reste, c'est à éviter comme la peste.
 
En gros, t'imagine que le "distinct" et le "like" c'est une ligne blanche continue.
Ben en voiture, t'as pas le droit de la franchir de ton propre gré. mais si un gibiers se lance sous tes roues, ou qu'un ovni se pose devant toi, là t'as le droit de faire un écart sur la voie d'en face. :spamafote:

n°1267291
Tamahome
⭐⭐⭐⭐⭐
Posté le 15-12-2005 à 14:04:56  profilanswer
 

tu as bu ?


---------------
Hobby eien /人◕ ‿‿ ◕人\
n°1267326
Arjuna
Aircraft Ident.: F-MBSD
Posté le 15-12-2005 à 14:19:45  profilanswer
 

bah nan, je m'escrime à faire des modèles de données correct, et à les exploiter correctement, plutôt que d'utiliser des parades de sagouin pour pallier à un manque de réflexion.

n°1267333
Arjuna
Aircraft Ident.: F-MBSD
Posté le 15-12-2005 à 14:23:01  profilanswer
 

j'oubliais : le "IN" est à mettre dans le même panier que le "DISTINCT" et le "LIKE". Le "IN", c'est même pire, puisqu'avec l'accroissement en taille de la base, une requête qui marchait très bien un jour va lamantablement planter le lendemain, de façon totalement alléatoire, parcequ'en certaines circonstances on aura dépassé le nombre maximal d'occurences acceptées par la clause "IN" (créfieu c'est de la bonne celle-là, ça me rappelle de bons souvenirs de nuits blanches en charmante compagnie - j'avais un jolie petit brin de stagiaire toute mimi pour m'aider à comprendre pourquoi la procédure de réplication d'une base plantait certaine nuits et pas d'autres :heink:)

n°1267378
belldandys
Posté le 15-12-2005 à 14:46:19  profilanswer
 

Je resume ce que je sais :
DISTINCT : -> souvent utilisé a tort, dans 90% des cas on peut l'eviter en construisant autrement sa requete. JAMAIS une requete n'est plus performante avec un distinct qu'avec une autre solution...
 
LIKE: -> sur des requetes multicritères parfois inévitables et dans la plupart des SGBD n'utilise pas les indexs, a fuire aussi sauf obligation (il est d'ailleurs conseillé souvent de faire une requete dynamique avec un = ou un LIKE en fonction du nombre de critère (1 ou +) car le parsing est plus avantageux que la non utilisation de l'index, enfin surtout sur des gros volumes de données....)
 
IN : A remplacer par EXISTS systématiquement avec une auto-jointure et très souvent sans ... Le pourquoi du comment est un peu long a expliquer ici...J'essaierai de retrouver un article si ca interesse quelqu'un...


Message édité par belldandys le 15-12-2005 à 16:02:25
n°1267381
gravastar_​bureau
vive la mise en page en tab...
Posté le 15-12-2005 à 14:46:45  profilanswer
 

Arjuna a écrit :

si je comprends bien, le moteur actuellement renvoie plusieurs références produit différentes, qui ont le même nom de produit.
 
c'est bien ça ?
si c'est ça, alors c'est là qu'il faut creuser un peu : c'est pas normal.
 
ensuite, tu fais quoi si t'as un produit "PRD1" et un produit "PRD2" qui s'appelle tous les deux "mon produit" ? tu décides comment duquel afficher ?


 
Alors c'est bien ça, pour le moment le moteur renvoie plusieurs produits qui ont le meme nom, car il s'agit d'un produit compatible avec plusieurs modèles de GSM (puisque c'est ce dont il s'agit). De ce côté-là, vu que ce n'est pas sensé être mon travail, je ne vais pas pouvoir creuser trop profondément.
 
Pour ce qui est de tes 2 produits "PRD1" et "PRD2", la réponse est au-dessus, en fait il s'agit du même produit.
 
Un embryon de piste pour éviter la double requête ?

n°1267385
Arjuna
Aircraft Ident.: F-MBSD
Posté le 15-12-2005 à 14:52:19  profilanswer
 

de toute façon, là j'ai un bonhomme noir et rose à côté de moi qui tiens un objets étrange et menançant, donc j'ai le droit d'écrire :
 


select distinct truc from chouette where machin in (select chose from bidule where jeronimo like '%' + machin.goldorak + '%')


 
ha nan, c'est le comptable qui venait me serrer la main.

n°1267388
Arjuna
Aircraft Ident.: F-MBSD
Posté le 15-12-2005 à 14:53:43  profilanswer
 

gravastar_bureau a écrit :

Alors c'est bien ça, pour le moment le moteur renvoie plusieurs produits qui ont le meme nom, car il s'agit d'un produit compatible avec plusieurs modèles de GSM (puisque c'est ce dont il s'agit). De ce côté-là, vu que ce n'est pas sensé être mon travail, je ne vais pas pouvoir creuser trop profondément.
 
Pour ce qui est de tes 2 produits "PRD1" et "PRD2", la réponse est au-dessus, en fait il s'agit du même produit.
 
Un embryon de piste pour éviter la double requête ?


ben oui, mais tu retournes quelle reférence dans ce cas alors ?
 
à mon avis, tu retournes trop de champs dans ta requête, c'est pour ça que ça merde.

n°1267406
gravastar_​bureau
vive la mise en page en tab...
Posté le 15-12-2005 à 15:01:54  profilanswer
 

Arjuna a écrit :

ben oui, mais tu retournes quelle reférence dans ce cas alors ?
 
à mon avis, tu retournes trop de champs dans ta requête, c'est pour ça que ça merde.


 
Je retourne le produit sans préciser sa compatibilité sur cette page. Après, dans sa fiche produit, ses compatibilités seront listées.
 
Bon, je vais m'en sortir en fait, mais j'aurais aimé savoir s'il était possible de retourner tous les champs d'une table en évitant les doublons, en se basant uniquement sur un champ. Ca n'est pas forcement logique de faire quelque chose comme ça si la base est bien conçue, mais bon ^^

n°1267412
Arjuna
Aircraft Ident.: F-MBSD
Posté le 15-12-2005 à 15:08:00  profilanswer
 

ben nan, c'est pas possible.
 
sinon, je répète la question : quand t'as un doublon sur ton champ, comment choisis-tu quelle ligne retenir plutôt que telle autre ?
 
un exemple :
 
Voici une table représentant l'arche de Noé (je dois me faire bâtiser, alors je révise)


bestilole  couleur
--------------
lapin    blanc
loup    gris
lapin   rose
loup    gris


 
select distinct bestilole, couleur from arche_de_noe
 
Ca donne :


bestilole  couleur
--------------
lapin    blanc
loup    gris
lapin   rose


 
OK, on a trouvé deux loup gris, donc on en a balancé un à l'eau.
Mais il reste deux lapins... Seulement, je balance lequel ? Le blanc ou le rose ? Ca, le SGBD il ne peut pas choisir à ta place. Il faut faut donc modifier ta requête pour lui dire sur quoi se baser pour discriminer les bestioles.

Message cité 1 fois
Message édité par Arjuna le 15-12-2005 à 15:08:25
n°1267415
Tamahome
⭐⭐⭐⭐⭐
Posté le 15-12-2005 à 15:09:28  profilanswer
 

y'a un p à baptiser :o


---------------
Hobby eien /人◕ ‿‿ ◕人\
n°1267427
Arjuna
Aircraft Ident.: F-MBSD
Posté le 15-12-2005 à 15:22:16  profilanswer
 

moi je préfère l'écrire avec un "â" ça fait penser à âne bâté :p

n°1267445
gravastar_​bureau
vive la mise en page en tab...
Posté le 15-12-2005 à 15:36:24  profilanswer
 

Arjuna a écrit :

Voici une table représentant l'arche de Noé (je dois me faire bâtiser, alors je révise)


bestilole  couleur
--------------
lapin    blanc
loup    gris
lapin   rose
loup    gris


 
select distinct bestilole, couleur from arche_de_noe
 
Ca donne :


bestilole  couleur
--------------
lapin    blanc
loup    gris
lapin   rose


 
OK, on a trouvé deux loup gris, donc on en a balancé un à l'eau.
Mais il reste deux lapins... Seulement, je balance lequel ? Le blanc ou le rose ? Ca, le SGBD il ne peut pas choisir à ta place. Il faut faut donc modifier ta requête pour lui dire sur quoi se baser pour discriminer les bestioles.


 
Quel lapin choisir, je te dirais qu'en ce qui me concerne la chose importante est qu'il s'agisse d'un lapin.. après sa couleur m'importe peu.

n°1267451
Arjuna
Aircraft Ident.: F-MBSD
Posté le 15-12-2005 à 15:41:10  profilanswer
 

donc, on est d'accord.
donc si tu vires la couleur de ta requête, t'aura plus de problème.
 
idem pour ta requête : si avec un distinct t'as encore des doublons, alors c'est que tu retournes un champ discriminant dont tu te moques : vire-le !

n°1267454
cinocks
Posté le 15-12-2005 à 15:41:27  profilanswer
 

dans ce cas, pourquoi recuperer le champ sur la couleur?

Message cité 1 fois
Message édité par cinocks le 15-12-2005 à 15:41:33

---------------
MZP est de retour
n°1267455
Arjuna
Aircraft Ident.: F-MBSD
Posté le 15-12-2005 à 15:41:44  profilanswer
 

grillaide, nananère :p

n°1267545
gravastar_​bureau
vive la mise en page en tab...
Posté le 15-12-2005 à 16:01:04  profilanswer
 

cinocks a écrit :

dans ce cas, pourquoi recuperer le champ sur la couleur?


 
Vous avez tout à fait raison, je voulais récupérer toutes les infos relatives aux produits à afficher pour ne pas dépayser la personne qui a fait ce script. Comme la base et l'ensemble des requêtes faites sur ce site me semblent louches, je ne veux pas tout changer o_O

n°1267581
cinocks
Posté le 15-12-2005 à 16:09:33  profilanswer
 

Arjuna a écrit :

grillaide, nananère :p


oui :( :cry:


---------------
MZP est de retour
mood
Publicité
Posté le   profilanswer
 


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

  [mysql] recherche "distinct"

 

Sujets relatifs
Site PHP/MysqlMysql sous linux
[ MySQL] chaines de caractères : LEFT() / RIGHT()[MySQL] Recherche de mots dans un blob
connexion et echange de donnée avec base mysqlDELPHI DBExpress et MySql
RECHERCHE AVEC SAXYScript PHP/Mysql
PHP Mysql et Access... 
Plus de sujets relatifs à : [mysql] recherche "distinct"


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