mais est-ce que ce traitement sur la table de terms doit forcément être itératif ?
A la base vous fait un update ? insert ?
Développez un peu votre process car le problème de vos perfs vient de là![]()
mais est-ce que ce traitement sur la table de terms doit forcément être itératif ?
A la base vous fait un update ? insert ?
Développez un peu votre process car le problème de vos perfs vient de là![]()
Oui, désolé...
La table terms contient des mots du dictionnaire (environ 70 000)
La table suggests contient des suggestions de recherche Google contenant le term
Donc pour résumer:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 SELECT t.id, t.term, count(CASE WHEN suggests.status = '0' THEN 1 END) AS nb_todo, count(CASE WHEN suggests.status = '1' THEN 1 END) AS nb_done FROM terms t LEFT JOIN suggests ON (suggests.termid = t.id) WHERE t.status = '0' GROUP BY t.id ORDER BY t.term ASC while($row_term = mysql_fetch_array($sql)) { if($row_term['nb_todo']==0 && $row_term['nb_done']==0) // Si aucune suggestion associée au term est trouver, alors on récupere les suggestions google // associé au term et on fait un INSERT INTO FROM suggests ... elseif($row_term['nb_todo'] > 0) // Si plusieurs suggestions associées au term sont non traitées alors on continue elseif($row_term['nb_todo']==0 && $row_term['nb_done'] > 0) // Si aucune suggestion associées au term non traitée et plusieurs traitées alors on // marque le term comme traité UPDATE FROM terms ... statut=1 }
oki donc la partie
Je ne pense pas que vous ayez une autre solution que de l'itératif, vu que vous devez récupérer quelque chose sur google.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 IF($row_term['nb_todo']==0 && $row_term['nb_done']==0) // Si aucune suggestion associée au term est trouver, alors ON récupere les suggestions google // associé au term et ON fait un INSERT INTO FROM suggests ...
Par contre, dans l'ensemble, votre process peut être découpé en 2 parties :
Un traitement itératif pour votre traitement google (et dans ce cas restreignez les conditions pour ne faire que ce traitement et pas itérer sur les lignes qui n'ont pas à être traitées).
Et une seule requête d'update pour ceci :
Car, pour cette partie-là, vous perdez du temps, vous faites un traitement itératif alors qu'une approche ensembliste marchera parfaitement.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 elseif($row_term['nb_todo']==0 && $row_term['nb_done'] > 0) // Si aucune suggestion associées au term non traitée et plusieurs traitées alors ON // marque le term comme traité UPDATE FROM terms ... statut=1
OK
Mais ce n'est pas ce qui est suggéré par les résultats souhaités dans la première demande.
Donc il faut utiliser le LEFT
OU
Le select INNER
UNION
les "term" qui n'existent pas dans Suggest
comme punkoff, d’où viennent les données sur la boucle WHILE ?
Ne pas tenir compte : je viens de voir vos 2 messages![]()
Je suis totalement d'accord avec vous.
En fait, cette partie est dans le cas où le script s’arrête et doit être relancer, cela permet de voir ce qui a été fait ou pas et de mettre à jour...Car pour cette partie là vous perdez du temps, vous faites un traitement itératif alors qu'une approche ensembliste marchera parfaitement.
Partager