8726 sujets

Développement web côté serveur, CMS

Bonjour à tous.

Dans mon site www.idsortie.fr j'utilise une table mysql pour gérer les évènements (les fêtes, brocantes ...).
Un enregistrement de type évènement a pour propriétés un lieu (lat/lon), date (début/fin), un intitulé etc ...
Mon problème est de repérer des doublons dans cette table. Les vrais doublons (ayant des champs identiques) sont faciles à trouver, mais il y a aussi des doublons "approximatifs", qui font référence à un même événement mais on été saisis de manière un peu différente : position lat/lon qui diffère de quelques centièmes, dates décalées, intitulé proche ...

Pour l'algorithme de similarité je pense pouvoir trouver, je fais un genre de calcul de distance, mais pour afficher les enregistrements qui sont proches j'ai un soucis.

Voici ma requête (juste un essai sur le champ lat) :
SELECT DISTINCT t1.id
FROM events AS t1
WHERE EXISTS (
              SELECT *
              FROM events AS t2
              WHERE t1.id <> t2.id
              AND   ABS (t1.lat - t2.lat)<0.02
)

J'aimerais afficher les paires d'ID (donc t1.id et t2.id) mais le premier SELECT ne connait pas t2, comment faire ? Et si vous avez d'autres idées pour rechercher des enregistrements "similaires" ou des quasi-doublons, je suis prenneur.

Bon dimanche à tous.
Modifié par Zebrou (09 Feb 2014 - 15:27)
je pense que j'ai trouvé
SELECT events.id, tmp.id
FROM events, events tmp
WHERE ABS(events.lat-tmp.lat)<0.02 AND .... AND (events.id>tmp.id) --> pour éviter de doubler les résultats


il me reste à trouver une solution pour calculer la similarité entre deux textes