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;