Juin 142011
 

ajouter DISTINCT dans une requête mysql permet d’éliminer les doublons et donc d’avoir une liste des éléments simplifiée.

mais voilà, quand il y a plusieurs colonnes ça se complique, exemple:

mysql> SELECT DISTINCT obj_1_norm,obj_2_norm,obj_1_diam,obj_2_diam FROM FF_XII_tresors ;
 +----------------------+----------------------+----------------------+----------------------+
 | obj_1_norm           | obj_2_norm           | obj_1_diam           | obj_2_diam           |
 +----------------------+----------------------+----------------------+----------------------+
 | potion               | super-potion         | bloc de rouille      | ether                | 
 | potion               | collyre              | bloc de rouille      | ether                | 
 | potion               | potion               | bloc de rouille      | ether                | 
 | potion               | super-potion         | bloc de rouille      | super-potion         | 
 | potion               | antidote             | bloc de rouille      | super-potion         |
 {..snip..}
 +----------------------+----------------------+----------------------+----------------------+
 618 rows IN SET (0.01 sec)


on voit bien les doublons et on n’a pas ce qu’on cherche, à savoir la liste de tous les éléments sans doublons.
pour s’en passer, on va utiliser l’argument UNION:

mysql> SELECT DISTINCT obj_1_norm FROM FF_XII_tresors UNION
 -> SELECT DISTINCT obj_2_norm FROM FF_XII_tresors UNION
 -> SELECT DISTINCT obj_1_diam FROM FF_XII_tresors UNION
 -> SELECT DISTINCT obj_2_diam FROM FF_XII_tresors
 -> ORDER BY obj_1_norm ;
 +----------------------+
 | obj_1_norm           |
 +----------------------+
 | -                    | 
 | 3000 gils            | 
 | aldebaran            | 
 {..snip..}
 +----------------------+
 322 rows IN SET (0.02 sec)

pour info, il y a une autre façon de faire mais bien moins élégante:

mysql> CREATE TEMPORARY TABLE tmp ( objets VARCHAR(50) NOT NULL DEFAULT '');
 mysql> INSERT INTO tmp SELECT obj_1_norm FROM FF_XII_tresors;
 mysql> INSERT INTO tmp SELECT obj_2_norm FROM FF_XII_tresors;
 mysql> INSERT INTO tmp SELECT obj_1_diam FROM FF_XII_tresors;
 mysql> INSERT INTO tmp SELECT obj_2_diam FROM FF_XII_tresors;
 SELECT DISTINCT * FROM tmp ;
 <snip> +----------------------+
 322 rows IN SET (0.01 sec)
 mysql> DROP TABLE tmp;

 Laisser un commentaire

Vous pouvez utiliser ces tags et attributs HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(requis)

(requis)

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.