Actualizar tabla con el tipo de cambio correcto

Estoy intentando sacar el cambio de 1 Libra a otras monedas, en este momento estoy sacando 1 Eur a otras monedas. por ejemplo 1 Eur = 0.81400 GBP, puedo revertir esto y obtener 1 GBP a Eur dividiendo con cada uno dándome una tasa de cambio de 1.228501228501229.

Quiero esto para todas las monedas, actualmente estoy usando un script php para obtener el tipo de cambio. ¿Cómo puedo modificar mi tabla Stock_currency y dividir GBP en todas las monedas y almacenarlas nuevamente en la tabla Stock_currency?

aquí está mi script PHP

<?php
class CurrencyConverter {

   var $xml_file = "www.ecb.int/stats/eurofxref/eurofxref-daily.xml";
   var $localhost, $sirnur, $abc123, $mohamed, $stock_currency;
   var $exchange_rates = array();

   //Load Currency Rates

   function CurrencyConverter($host,$user,$pass,$db,$tb) {

      $this->localhost = $host;
      $this->sirnur = $user;
      $this->abc123 = $pass;
      $this->mohamed = $db;
      $this->stock_currency = $tb;

      $this->checkLastUpdated();

      $conn = mysql_connect($this->localhost,$this->sirnur,$this->abc123);

      $rs = mysql_select_db($this->mohamed,$conn);

      $sql = "SELECT * FROM ".$this->stock_currency;

      $rs =  mysql_query($sql,$conn);

      while($row = mysql_fetch_array($rs)) {

         $this->exchange_rates[$row['currency']] = $row['rate'];
      }

   }

   /* Perform the actual conversion, defaults to £1.00 GBP to USD */
   function convert($amount=1,$from="USD",$to="GBP",$decimals=2) {

      return(number_format(($amount/$this->exchange_rates[$from])*$this->exchange_rates[$to],$decimals));
   }

   /* Check to see how long since the data was last updated */
   function checkLastUpdated() {
      $conn = mysql_connect($this->localhost,$this->sirnur,$this->abc123);

      $rs = mysql_select_db($this->mohamed,$conn);

      $sql = "SHOW TABLE STATUS FROM ".$this->mohamed." LIKE '".$this->stock_currency."'";

      $rs =  mysql_query($sql,$conn);

      if(mysql_num_rows($rs) == 0 ) {

         $this->createTable();
      } else {
         $row = mysql_fetch_array($rs);
         if(time() > (strtotime($row["Update_time"])+(12*60*60)) ) {

            $this->downloadExchangeRates();
         }
      }
   }

   /* Download xml file, extract exchange rates and store values in database */

   function downloadExchangeRates() {
      $currency_domain = substr($this->xml_file,0,strpos($this->xml_file,"/"));
      $currency_file = substr($this->xml_file,strpos($this->xml_file,"/"));
      $fp = @fsockopen($currency_domain, 80, $errno, $errstr, 10);
      if($fp) {

         $out = "GET ".$currency_file." HTTP/1.1\r\n";
         $out .= "Host: ".$currency_domain."\r\n";
         $out .= "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8) Gecko/20051111 Firefox/1.5\r\n";
         $out .= "Connection: Close\r\n\r\n";
         fwrite($fp, $out);
         while (!feof($fp)) {

            $buffer .= fgets($fp, 128);
         }
         fclose($fp);

         $pattern = "{<Cube\s*currency='(\w*)'\s*rate='([\d\.]*)'/>}is";
         preg_match_all($pattern,$buffer,$xml_rates);
         array_shift($xml_rates);

         for($i=0;$i<count($xml_rates[0]);$i++) {

            $exchange_rate[$xml_rates[0][$i]] = $xml_rates[1][$i];
         }

         $conn = mysql_connect($this->localhost,$this->sirnur,$this->abc123);

         $rs = mysql_select_db($this->mohamed,$conn);

         foreach($exchange_rate as $currency=>$rate) {

            if((is_numeric($rate)) && ($rate != 0)) {

               $sql = "SELECT * FROM ".$this->stock_currency." WHERE currency='".$currency."'";
               $rs =  mysql_query($sql,$conn) or die(mysql_error());
               if(mysql_num_rows($rs) > 0) {

                  $sql = "UPDATE ".$this->stock_currency." SET rate=".$rate." WHERE currency='".$currency."'";
               } else {

                  $sql = "INSERT INTO ".$this->stock_currency." VALUES('".$currency."',".$rate.")";
               }

               $rs =  mysql_query($sql,$conn) or die(mysql_error());
            }

         }
      }
   }

   /* Create the currency exchange table */
   function createTable() {

      $conn = mysql_connect($this->localhost,$this->sirnur,$this->abc123);

      $rs = mysql_select_db($this->mohamed,$conn);

      $sql = "CREATE TABLE ".$this->stock_currency." ( currency char(3) NOT NULL default '', rate float NOT NULL default '0', PRIMARY KEY(currency) ) ENGINE=MyISAM";

      $rs =  mysql_query($sql,$conn) or die(mysql_error());

      $sql = "INSERT INTO ".$this->stock_currency." VALUES('EUR',1)";

      $rs =  mysql_query($sql,$conn) or die(mysql_error());

      $this->downloadExchangeRates();
   }

}

el archivo de inclusión

<?php
   include('CurrencyConverter.php');
   $x = new CurrencyConverter('localhost','root','root','mohamed','Stock_Currency');

//  mysql_query("ALTER TABLE Stock_currency  add column We_sell varchar (20) ; ") or die(mysql_error());
//  mysql_query("ALTER TABLE Stock_currency  add column We_buy varchar (20) ; ") or die(mysql_error());  


   ?> 

preguntado el 02 de enero de 13 a las 19:01

La mysql_* Las funciones que está utilizando han quedado obsoletas. Por favor use mysqli or PDO. -

gracias es una informacion muy util -

1 Respuestas

La consulta SQL para hacer lo que quieres es algo como:

select c.ccy, c.rate/EuroGBP.rate as GBPExchangeRate
from Currency c cross join
     (select rate from Currency c where c.ccy = 'GPB') EuroGBP

Respondido el 03 de enero de 13 a las 01:01

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.