$query="SELECT idcatalbum,nomcatalbum,catalbum FROM catalbum,album WHERE catalbum=idcatalbum AND actif=1 ORDER BY nomcatalbum";
$result=mysql_query($query);
Sauf que dans cette requette, il me prend plusieurs fois des enregistrement, mais je souhaite que si des enregistrement sont identique, qu'il ne m'en prenne qu'un.
Je sais pas si je suis bien clair dans mon explication.
A priori c'est un problème de produit cartésien dû à un problème de jointure donc il serait plus propre de résoudre le problème de la jointure que de coller un distinct.
la première avec DISCTINCT la séconde avec GROUP BY
SELECT DISTINCT idcatalbum, nomcatalbum, catalbum
FROM catalbum, album
WHERE catalbum = idcatalbum AND actif=1
ORDER BY nomcatalbum;
SELECT idcatalbum, nomcatalbum, catalbum
FROM catalbum, album
WHERE catalbum = idcatalbum AND actif=1
GROUP BY idcatalbum, nomcatalbum, catalbum
ORDER BY nomcatalbum;
dans le GROUP BY tu mets la liste des champs sur lesquels tu veux faire ton regroupement, mais dans ce cas tu dois utiliser des fonctions de regroupements sur les autres champs que tu veux récupérer qui n'y appartiennent pas MIN, MAX, AVG, etc.
Apparemment c'est pour récupérer la liste des catégories pour lesquelles il existe au moins un album, tu peux biaiser avec des sous-requêtes, des vues, mais au final pour l'optimiseur ça reviendra au même.
Le DISTINCT me va bien, c'est pour un site qui va recevoir au moins 5 visites / jours alors l'optimisation n'a vraiment pas d'importance, mais merci pour les exemples et explications.
Détourageophile