Foros del Web » Programando para Internet » PHP »

evitar ingresar la misma info 2 veces...

Estas en el tema de evitar ingresar la misma info 2 veces... en el foro de PHP en Foros del Web. Hola a todos, Deseo hacer lo siguiente: Tengo que ingresar unos campos a la base de datos por medio de una página que se ejecuta ...
  #1 (permalink)  
Antiguo 19/06/2008, 01:04
 
Fecha de Ingreso: junio-2006
Ubicación: Antofagasta
Mensajes: 216
Antigüedad: 18 años, 5 meses
Puntos: 7
Pregunta evitar ingresar la misma info 2 veces...

Hola a todos,

Deseo hacer lo siguiente:

Tengo que ingresar unos campos a la base de datos por medio de una página que se ejecuta constantemente recogiendo unos valores de otro archivo, pero solo tengo que ingresar los datos de ese archivo "externo" solo si éstos han cambiado.
Como el script se esta ejecutando cada XX tiempo va a estar guardando la info en la base de datos y si dichos datos que son recogido de otro lado no han cambiado entonces voy a tener registros duplicados.

No se como plantearme la tarea, podría ser asi:
  1. obtengo los datos desde el archivo externo
  2. leo el ULTIMO registro de la base de datos
  3. comparo los dos, si NO coinciden entonces inserto los datos en la bbdd, de lo contrario no hago nada

Al parecer esta bien esto, es la forma correcta de hacerlo??

Como lo hago para leer solo el último registro de la base de datos para poder compararlo con los datos que voy a ingresar??

Eso nada mas.

Saludos
  #2 (permalink)  
Antiguo 19/06/2008, 02:52
 
Fecha de Ingreso: junio-2006
Ubicación: Antofagasta
Mensajes: 216
Antigüedad: 18 años, 5 meses
Puntos: 7
Respuesta: evitar ingresar la misma info 2 veces...

Me respondo a mi mismo pero igual quedo con algunas dudas...

Buscando en el foro encontre lo siguiente para obtener el ID mas alto:

Código PHP:
...
$rs=mysql_query("select Max(id) as mayor from tabla",$link);
$row mysql_fetch_array($rs);

$cantidad=$row["mayor"];
echo 
$cantidad
... 
Es efectivo eso?? Lo probé y me muestra el valor del ultimo ID con lo cual aparentemente se ve que funciona como lo deseo, osea, me muestra siempre el ID mayor sin importar que en la tabla se hayan borrado algunos registros y tenga por ejemplo 1,2,3,7,8,11,12,13,45,46 Siempre me mostrará el último ID, en este caso 46 ??

Existe una manera mejor de hacerlo??

Con el codigo anterior solo puedo obtener el ID mas alto, hasta ahi tengo solo la mitad de lo que necesito por que lo que quiero es, no solo obtener el ID mas alto sino que todos los campos del ID mas alto.

Se me ocurre que podría, en lugar del codigo anterior, simplemente hacer una consulta con LIMIT 1 para asi despues comparar los datos que deseo ingresar con el dato encontrado en la base de datos pero me aparece otra duda...
El dato que obtengo de la base de datos será el correspondiente al ID mas alto??
o tendré que ocupar el codigo que puse al principio y en base al ID obtenido en esa consulta, realizar una nueva consulta con la condicion de que el id sea igual al id obtenido en la consulta anterior??

Espero no haberlos enredado con mi consulta, laverdad es que hasta yo me enredo al releer todo.

Espero me puedan ayudar y si necesitan que les aclare un poco mas mi consulta con gusto lo haré para facilitarles las cosas y me den una mano.

Saludos

Última edición por Greco2; 19/06/2008 a las 03:00
  #3 (permalink)  
Antiguo 19/06/2008, 02:58
 
Fecha de Ingreso: junio-2008
Mensajes: 9
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: evitar ingresar la misma info 2 veces...

Hola,

No se si he entendido bien lo que planteas, para leer los datos de un fichero de texto supongo que utilizas la funcion "LOAD DATA INFILE".

Para leer el ultimo registro de la BD, guarda en una variable el resultado de mysql_num_rows, es el numero de registros de una tabla, el numero que guardas pertenece al ultimo introducido, de ahi puedes sacar lo que quieras.
  #4 (permalink)  
Antiguo 19/06/2008, 03:01
 
Fecha de Ingreso: junio-2008
Mensajes: 9
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: evitar ingresar la misma info 2 veces...

Por cierto una curiosidad...

Si no te importa explicame como introduces los datos externos, como te decia antes supongo que con LOAD DATA INFILE, me interesa saberlo pues yo estoy haciedo algo parecido, y tengo un problema con mi servidor, puedes contarme si lo estas haciendo asi?????
  #5 (permalink)  
Antiguo 19/06/2008, 03:03
 
Fecha de Ingreso: abril-2003
Ubicación: Malaga
Mensajes: 176
Antigüedad: 21 años, 7 meses
Puntos: 1
Respuesta: evitar ingresar la misma info 2 veces...

Supongo que usas mysql, asi que puedes poner "ORDER BY id DESC LIMIT 1"
  #6 (permalink)  
Antiguo 26/06/2008, 02:59
 
Fecha de Ingreso: junio-2006
Ubicación: Antofagasta
Mensajes: 216
Antigüedad: 18 años, 5 meses
Puntos: 7
Respuesta: evitar ingresar la misma info 2 veces...

Hola,
lo he solucionado en base a lo sugerido por CARGOSAN, realizando una consulta en orden descendente y limitado a 1 registro, esto es asi por que de igual manera necesitaba recuperar ese registro para compararlo con el que intentaba ingresar.... si eran distintos lo almacenaba.


Respecto a la pregunta de EMADRID, los datos del archivo externo (TXT) lo estoy leyendo con la funcion file() con el cual obtengo un array con cada linea del archivo.
En mi caso me sirve hacerlo de esa manera ya que son los datos de unas lineas especificas las que estoy utilizando.

Saludos
  #7 (permalink)  
Antiguo 26/06/2008, 03:46
Avatar de eddwinpaz  
Fecha de Ingreso: noviembre-2007
Ubicación: Merida , Venezuela
Mensajes: 1.066
Antigüedad: 17 años
Puntos: 25
Respuesta: evitar ingresar la misma info 2 veces...

Aki ta..

<?php
$link
= mysql_connect('localhost', 'mysql_user', 'mysql_password');
if (!
$link) {
die(
'Could not connect: ' . mysql_error());
}
mysql_select_db('mydb');

mysql_query("INSERT INTO mytable (product) values ('kossu')");
printf("Last inserted record has id %d\n", mysql_insert_id());
?>

http://ve.php.net/mysql_insert_id

mysql_insert_id — Get the ID generated from the previous INSERT operation
Description

int mysql_insert_id ([ resource $link_identifier ] )
Retrieves the ID generated for an AUTO_INCREMENT column by the previous INSERT query.
__________________
O nos hacemos miserables o nos hacemos fuertes , la cantidad de trabajo es la misma.
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 12:51.