OVH Cloud OVH Cloud

recherche de doublons

1 réponse
Avatar
yvon.thoravalNO
j'utilise le tuto du site MuSQL :

$sql = "SELECT DISTINCT p1.igd_id, p2.igd_id, p1.igd_nom, p2.igd_nom ".
"FROM t_ingredient_igd as p1, t_ingredient_igd as p2 ".
"WHERE ( p1.igd_nom LIKE p2.igd_nom ) AND ( p1.igd_id <>
p2.igd_id )";


mais le résultat comporte des boublons en double voir triple...

j'ai essayé en remplaçant p1.igd_id <> p2.igd_id par p1.igd_id <
p2.igd_id

ça ne fait qu'améliorer...

j'ajoute à cette requête un script php pour supprimer les doublons "en
double ou triple" :

foreach ($doublons as $doublon) {
if (!in_array($doublon['igd_id'],
$list_doublons[$doublon['igd_nom']])) {
$list_doublons[$doublon['igd_nom']][] = $doublon['igd_id'];
}
}

($doublons est l'array de tableaux associatifs sortant de cette requête.

y a t'il un moyen plus simple et plus élégant ?

peut-on obtenir le résultat directement par une requête sql ?

(MySQL_ Ver 12.22 Distrib 4.0.16)
--
Yvon Thoraval

1 réponse

Avatar
P'tit Marcel
(Yvon Thoraval) écrivit
news:1g7j1jm.1mh9q64epdm24N%:

$sql = "SELECT DISTINCT p1.igd_id, p2.igd_id, p1.igd_nom, p2.igd_nom ".
"FROM t_ingredient_igd as p1, t_ingredient_igd as p2 ".
"WHERE ( p1.igd_nom LIKE p2.igd_nom ) AND ( p1.igd_id <>
p2.igd_id )";



pas un LIKE quand même ?


y a t'il un moyen plus simple et plus élégant ?
peut-on obtenir le résultat directement par une requête sql ?



en une requête, non, sauf si tu n'as que des doublons (càd pas de triplons
ou +). En deux requêtes ça le fait :

CREATE TEMPORARY TABLE clemult SELECT igd_id, count(*) as nb
FROM t_ingredient_igd GROUP BY igd_id HAVING count(*) > 1

SELECT p1.igd_id, p1.igd_nom
FROM t_ingredient_igd as p1
INNER JOIN clemult USING(igd_id)


Si tu as au plus des doubons, ça se fait en un coup :

SELECT igd_id, min(igd_nom) as igd_nom1, max(igd_nom) as igd_nom2,
count(*) as nb
FROM t_ingredient_igd GROUP BY igd_id HAVING count(*) > 1


eça