Forums : Xul, Xbl, JS...

Aller à la discussion :  Plus récente Plus ancienne

# [Résolu] SQLite se fait rattrapper pas la vitesse d'une boucle : Bug !

Envoyé par : Raphael

Date : 01/11/2007 19:45

Bonjour, je travaille avec une base SQLite3 et je suis en train de créer un script qui scannerait une table pour trouver des "doublons" dans mes entrées...

Voici mon algo. grossomodo :

  • Je fais un SELECT général sur tous les ID de mes entrées
  • Dans ma boucle, je stocke l'ID et différentes propriétés de mon entrée
  • Avec ces infos, je fais un SELECT pour trouver des entrées avec les mêmes propriétés mais avec un ID différent forcément, pour trouver des "doublons"

Voilà, le problème semble être que ce script tourne plus vite que les requêtes, effectivement, j'ai une erreur au bout du 100ème passage environ...

Quand je fais un try{}catch(e){alert(e);}, j'ai une erreur SQLite affichée, et quand je continue, je vais environ 100 passage plus loin et même erreur, etc...

A mon sens, on dirait que les SELECT se font rattraper par la nouvelle boucle et que ça finit par bugguer...

Qu'en pensez-vous ? Auriez-vous une autre méthode à me proposer ? Une solution ?

Je ne vois pas comment faire autrement, que boucler sur chaque élement et faire une requête pour chercher des éléments similaires par requête...

Merci d'avance.

# Re: SQLite se fait rattrapper pas la vitesse d'une boucle : Bug !

Envoyé par : omicron

Date : 03/11/2007 19:03

Si tu compares les résultats d'un "SELECT COUNT(X)" avec ceux d'un "SELECT COUNT(DISTINCT X)", tu sauras immédiatement si tu es en présence de doublons ou non.

# Re: SQLite se fait rattrapper pas la vitesse d'une boucle : Bug !

Envoyé par : Raphael

Date : 03/11/2007 22:25

Ouais, mais ça c'est pour de "vrais" doublons... alors que moi, je suis obligé de faire une recherche sur plusieurs champs ou sur des champs approximatifs genre WHERE Name like 'Name',...

J'ai une idée que je testerai demain : tout faire manuellement :

  • Je charge un tableau complet avec toutes mes caractéritiques
  • Je boucle sur chaque élément de mon tableau, et pour chaque élément, je reparcours l'ensemble de mon tableau.
  • Ca va me faire n x n x n boucles mais bon, je vois pas d'autres moyens (n pour charger mon tableau, n pour prendre chaque élement, et n pour le comparer à tous les autres... de manière "manuelle")

# Re: SQLite se fait rattrapper pas la vitesse d'une boucle : Bug !

Envoyé par : syl

Date : 04/11/2007 17:45

Pourquoi ne pas traiter cela en SQL directement et faire une requete du type :

SELECT t1.id FROM table1 as t1, table1 as t2 WHERE t1.id <> t2.id
AND (t1.champs1 = t2.champs1 OR t1.champs2 LIKE t2.champs2)

Syl

# Re: SQLite se fait rattrapper pas la vitesse d'une boucle : Bug !

Envoyé par : Raphael

Date : 04/11/2007 18:55

Wah, j'avais complètement zappé qu'on pouvait faire ce genre de choses en SQL... utiliser des recherches sur la même table...

Ca devrait pouvoir marcher, faut que j'étudie ça en détail.

Merci pour la piste =)

EDIT : En fait, ce problème est lié à mon autre topic et il est résolu : On ne peut pas faire une requête SQL pendant qu'on est dans une boucle While (executeStep)

Il n'est plus possible de poster des messages dans ce forum.


Copyright © 2003-2013 association xulfr, 2013-2016 Laurent Jouanneau - Informations légales.

Mozilla® est une marque déposée de la fondation Mozilla.
Mozilla.org™, Firefox™, Thunderbird™, Mozilla Suite™ et XUL™ sont des marques de la fondation Mozilla.