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à ;)
Version imprimable
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:
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:
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:
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 :ccool:
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 :calim2:
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 :mouarf:
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...Citation:
Car pour cette partie là vous perdez du temps, vous faites un traitement itératif alors qu'une approche ensembliste marchera parfaitement.