Foros del Web » Programando para Internet » PHP »

Comparacion de datos de la BD con Archivo

Estas en el tema de Comparacion de datos de la BD con Archivo en el foro de PHP en Foros del Web. Hola Maestros: Estoy haciendo un programita en el que leo linea por linea en mi archivo y voy checando si ya existe esa linea en ...
  #1 (permalink)  
Antiguo 20/03/2003, 14:09
Avatar de payo22  
Fecha de Ingreso: noviembre-2002
Ubicación: México
Mensajes: 839
Antigüedad: 15 años, 1 mes
Puntos: 1
Comparacion de datos de la BD con Archivo

Hola Maestros:

Estoy haciendo un programita en el que leo linea por linea en mi archivo y voy checando si ya existe esa linea en mi base de datos y si ya existe no la inserta.

El problema es que la primera vez que lo ejecuto y mi base de datos esta vacia no hay problema ya que inserta el archivo sin ningun problema, pero si quiero volver a insertar el mismo archivo no me respeta la condicion que manejo de que si el registro ya existe no lo inserte.

Esto para evitar la duplicidad de datos.

el codigo que utilizo es el siguiente:

Código PHP:
<?php


$dir 
opendir('ARCHIVOS_BD');

  while(
false !== ($file readdir($dir))) {
     if ((
$file != ".") and ($file != "..")){
          
$Nom_arch fopen("ARCHIVOS_BD/".$file,"r");
        while(!
feof($Nom_arch)){

             
$cadena fgets($Nom_arch,4096);
    
           
$x split('[,]',$cadena);
             
             if ((
$x[9] >= 1) and ($x[9] <= 3)){
               
$tabla "TTAA".$x[0];
                 
             }
             
           
$fecha split('["]',$x[1]);
             
$hora split(' ',$fecha[1]);
             
$ps round($x[2]);
             
$pp round($x[3]);
             
$hgt round($x[4]);
             
$estacion $x[0];
             
$fecha2 $hora[0];
             
$dia split('[- ]',$fecha2); 
             
$hoy $dia[0].$dia[1].$dia[2].$dia[3];
             
$hora2 $hora[1];
             
$link mysql_connect("localhost","root","admin");         
             
mysql_select_db("RADIOSONDEO",$link);
             
$sentencia "select * from $tabla where Estacion = $estacion and Fecha = '$hoy' and Hora = '$hora2' and PS = $ps and PP = $pp and HGT = $hgt and TT = $x[5] and TD = $x[6] and DD = $x[7] and FF = $x[8] and Bloque = $x[9]";
             
$result mysql_query($sentencia,$link); 
             if (
$row=mysql_fetch_array($result)){
                  
                     echo 
"ya existen<br>"
                 
             }
             else {
                      

                     
                     
$sql "INSERT INTO $tabla (Estacion,Fecha,Hora,PS,PP,HGT,TT,TD,DD,FF,Bloque)";
                   
$sql .="VALUES ($x[0],'$hora[0]','$hora[1]',$x[2],$x[3],$x[4],$x[5],$x[6],$x[7],$x[8],$x[9])";
                   
mysql_query($sql);
                
             }
    
       }
    }
             
}

  
closedir($dir);

?>
pero no se en donde este el error .

en este programa leo los archivos que se encuentran en un directorio.

espero me puedan ayudar.

a el formato del archivo que leo es el siguiente:

76225,"1997-01-01 00", 859.0, 1000.0, -999.0, -999.0, -999.0, -999.0, -999.0, 1.0
76225,"1997-01-01 00", 859.0, 925.0, -999.0, -999.0, -999.0, -999.0, -999.0, 1.0
76225,"1997-01-01 00", 859.0, 859.0, 1428.0, 21.0, 1.0, 80.0, 4.0, 3.0

Última edición por payo22; 20/03/2003 a las 14:32
  #2 (permalink)  
Antiguo 20/03/2003, 14:52
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Como lo que pretendes es saber si el registro existe o no bajo esas variabels de tu condicion .. sería recomendable que usaes para "contar" los registros q coincidan la sentencia COUNT() de Msyql .. Esto ademas optimizará mas todavía el rendimiento de tu aplicación que hacer un: $row=mysql_fetch_array($result) y usarlo como "booleano" (si hay registros da TRUE sino .. False)

Me refiero a:
Código PHP:
$sentencia "select COUNT(*) from $tabla where Estacion = $estacion and Fecha = '$hoy' and Hora = '$hora2' and PS = $ps and PP = $pp and HGT = $hgt and TT = $x[5] and TD = $x[6] and DD = $x[7] and FF = $x[8] and Bloque = $x[9]";
             
$result mysql_query($sentencia,$link); 
             if (
mysql_result($result,0) > 0){ 
Lo que tienes que ver es si Con tu lógica actual . .o usando la que te propongo yo para contar registros revisa si el resultado es correcto ...


Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 20/03/2003, 15:09
Avatar de payo22  
Fecha de Ingreso: noviembre-2002
Ubicación: México
Mensajes: 839
Antigüedad: 15 años, 1 mes
Puntos: 1
perdon pero que quieres decir con:

if (mysql_result($result,0) >0){
  #4 (permalink)  
Antiguo 20/03/2003, 15:34
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
De la consulta que se hace usando COUNT() (funcion de Mysql) se obtiene UN solo registro con UN solo campo .. cuyo valor es el total de registros contabilizados en esa consulta bajo esas condiciones WHERE q hagas ...

Por eso uso mysql_result() para obtener ese único registro (q se q es el 0) y ese único campo (q sé q es el 0 .. pero si se omite se toma por defecto el 0) ...

Si las coincidencias de tus WHERE .. AND .. AND .. se cumplen dará 1 o varios registros como resultado .. si no será 0 .. por eso digo "Si es >mayor> de Cero " ...

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #5 (permalink)  
Antiguo 20/03/2003, 23:49
Avatar de payo22  
Fecha de Ingreso: noviembre-2002
Ubicación: México
Mensajes: 839
Antigüedad: 15 años, 1 mes
Puntos: 1
Problema con comparacion

Hola Cluster:

ya hice la prueba con el COUNT pero tengo el mismo problema al querer meter el mismo archivo me respeta la condicion solo para unas lineas del archivo, es decir , que inserta los registros aun sabiendo que estan en la base de datos.

el codigo nuevo es el siguiente :

Código PHP:
<?php


$dir 
opendir('ARCHIVOS_BD');

  while(
false !== ($file readdir($dir))) {
     if ((
$file != ".") and ($file != "..")){
          
$Nom_arch fopen("ARCHIVOS_BD/".$file,"r");
        while(!
feof($Nom_arch)){

             
$cadena fgets($Nom_arch,4096);
    
           
$x split('[,]',$cadena);
             
             if ((
$x[9] >= 1) and ($x[9] <= 3)){
               
$tabla "TTAA".$x[0];
                 
             }
             
$estacion=0;$hoy="";$hora2="";$ps=0;$pp=0;$hgt=0;$tt=0;$td=0;$dd=0;$ff=0;$bloque=0;
           
$fecha split('["]',$x[1]);
             
$hora split(' ',$fecha[1]);
             
$ps round($x[2]);
             
$pp round($x[3]);
             
$hgt round($x[4]);
             
$tt $x[5];
             
$td $x[6];
             
$dd $x[7];
             
$ff $x[8];
             
$bloque round($x[9]);
             
$estacion $x[0];
             
$fecha2 $hora[0];
             
$dia split('[- ]',$fecha2); 
             
$hoy $dia[0].$dia[1].$dia[2];
             
$hora2 $hora[1];
             
$link mysql_connect("localhost","root","admin");         
             
mysql_select_db("RADIOSONDEO",$link);
             
$sentencia "select COUNT(*) from $tabla where Estacion = $estacion and Fecha = $hoy and Hora = $hora2 and PS = $ps and PP = $pp and HGT = $hgt and TT = $tt and TD = $td and DD = $dd and FF = $ff and Bloque = $bloque";
             
$result mysql_query($sentencia,$link); 
             if (
mysql_result($result,0) > 0){
                   
                   echo 
"Los datos ya existen <br>";

              }
              else{
                   echo 
"Introduciendo los datos <br>"
                   
$sql "INSERT INTO $tabla (Estacion,Fecha,Hora,PS,PP,HGT,TT,TD,DD,FF,Bloque)";
                   
$sql .="VALUES ($x[0],'$hora[0]','$hora[1]',$x[2],$x[3],$x[4],$x[5],$x[6],$x[7],$x[8],$x[9])";
                   
mysql_query($sql);
                   
              }
              
             
    
       }
    }
             
}

  
closedir($dir);

?>
no se por que solo en algunos casos cumple la condicion.

no se cual sea el problema.

gracias por tu apoyo.
  #6 (permalink)  
Antiguo 21/03/2003, 08:00
Avatar de DINASEN  
Fecha de Ingreso: marzo-2003
Mensajes: 997
Antigüedad: 14 años, 9 meses
Puntos: 1
conoceis un afuncion parecida o igual a mysql_result pero para interbase es me patee el manual pero parece que no existe

Un Saludo
  #7 (permalink)  
Antiguo 21/03/2003, 09:52
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
DINASEN!!!

Si quieres obtener respuestas .. Haz tus preguntas de forma ordenada .. Eso que planteas NO tiene naaaaddaa q ver con este tema .. (pese que veas q alguien está usando esa función ..)

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #8 (permalink)  
Antiguo 21/03/2003, 09:58
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
payo22 ..

Sin datos que probar ni como son .. es muyyy dificil darte una respuesta .. Y mas cuando dices "algunos datos si .. otros no" ... Mas encima cuando estas mezclando una Base de tados (con su estructura de tipos de campos .. etc) y un archivo de texto plano con mas datos y su propia estructura .. A eso sumamos que no lo haces sobre un solo archivo sino en un bucle sobre los archivos de un directorio ..

(¿tu serias capaz de dar una respuesta sin tener esos datos? .. piensalo ...)

Para ese caso .. EVALUALO tu mismo .. haz "echo" de tus variables en todos lados y revisa paso a pasao cada iteraccion de tu lógica .. intenta localizar en que dato falla y ahí podriamos ver que o porqué sucede ..

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:06.