Update d'une table pour des enregistrements venant d'une autre table

Update d'une table pour des enregistrements venant d'une autre table - SQL/NoSQL - Programmation

Marsh Posté le 23-05-2016 à 14:45:08    

Bonjour,
Je travaille avec MySQL et j'essaye d'optimiser un script PHP. Actuellement, j'ai la portion de code lente suivante :

Code :
  1. 1) Récupération des enregistrements à traiter :
  2. SELECT td.lat, td.lng, td.level, td.radius FROM TableData td WHERE td.level >= 10
  3.  
  4. 2) Pour chaque enregistrement retourné :
  5. SI level >= 60 ALORS
  6. $Sql = "UPDATE TableCG cg SET cg.nbcircles = cg.nbcircles + 1, cg.level = IF(cg.level >= ".$row['level'].", cg.level, ".$row['level']." )
  7. WHERE (6366000 * 2 * ASIN(SQRT(POW(SIN((RADIANS(".$row['lat']." ) - RADIANS(cg.lat)) / 2.0), 2)
  8. + COS(RADIANS(".$row['lat']." )) * COS(RADIANS(cg.lat)) * POW(SIN((RADIANS(".$row['lng']." ) - RADIANS(cg.lng)) / 2.0), 2)))) <= ".$row['radius']
  9.  
  10. SINON
  11. $Sql = "UPDATE TableCG cg SET cg.nbcircles = cg.nbcircles + 1, cg.level = IF(cg.level >= ".$row['level'].", cg.level, ".$row['level']." )
  12. WHERE (6366000 * 2 * ASIN(SQRT(POW(SIN((RADIANS(".$row['lat']." ) - RADIANS(cg.lat)) / 2.0), 2)
  13. + COS(RADIANS(".$row['lat']." )) * COS(RADIANS(cg.lat)) * POW(SIN((RADIANS(".$row['lng']." ) - RADIANS(cg.lng)) / 2.0), 2)))) BETWEEN "
  14. .(0.5 * $row['radius'])." AND ".$row['radius'];
  15.  
  16. FIN SI
  17.  
  18. 3)Exécuter $Sql


 
Je voudrais savoir s'il y a moyen de ne faire que 2 requêtes SQL (une par cas) ou mieux, une seule requête SQL.
 
Merci :jap:


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 23-05-2016 à 14:45:08   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed