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;