Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 
Índice general » Otros Temas » Bases de Datos » Número de la fila consultada Responder al tema
Nuevo tema


Página 1 de 1  [ 9 mensajes ] 
 
Nota 2006-11-30 11:15 @510

Perlero Nuevo
Registrado: 2005-10-06 06:36 @316
Ubicación: España
Mensajes: 50
Número de la fila consultada
Holas. Ando haciendo un script que sincroniza bases de datos.

Necesito saber qué entradas aún no existen en la base de datos remota; lo que hago es lo siguiente:

Me conecto a la db remota y selecciono la última entrada que existe, y con el id de esa entrada selecciono la misma entrada en la db local.

Necesito saber el número de la fila selecionada en la db local para luego hacer una consulta que devuelva las filas más nuevas que esa.

He estado probando con la sentencia rows del dbi pero eso devuelve el número de filas que la consulta selecciona, lo que necesito saber es la posición de la fila para luego seleccionar las entradas más nuevas...

Si alguien tiene idea se agradecería mucho :D

Salu2 amigos.


Última edición por AkonD el 2006-11-30 11:37 @526, editado 1 vez en total

Nota 2006-11-30 11:22 @515
Avatar de Usuario
Vive para Perl en Español
Registrado: 2003-11-18 16:13 @717
Ubicación: Buenos Aires
Mensajes: 455
¿ Cuál es el index de la tabla ? Porque me resultaría más lógico seleccionar el último en la base vieja y luego seleccionar los más nuevos de la nueva y meterlos en la vieja...

¿ Pero si hay updates en la DB ? ¿Por qué no mejor crear y restorear backups ?

Saludos

_________________
MonoSwim


Nota 2006-11-30 11:35 @524

Perlero Nuevo
Registrado: 2005-10-06 06:36 @316
Ubicación: España
Mensajes: 50
Es lo que hago, selecionar el último de la db central (que es la vieja) y luego mi intención es seleccionar los más nuevos que el último de la vieja.
El index no sé... yo sé que hay 2 "primary keys"
Syntax: [ Download ] [ Hide ]
Using sql Syntax Highlighting
CREATE TABLE `captures2006_11` (
  `pk` char(16) NOT NULL DEFAULT '0',
  `sensorID` char(6) NOT NULL DEFAULT '',
  `machineID` char(6) NOT NULL DEFAULT '',
  `alarma` tinyint(3) UNSIGNED NOT NULL DEFAULT '0',
  `alarmaID` char(6) DEFAULT NULL,
  `state` tinyint(3) UNSIGNED NOT NULL DEFAULT '0',
  `value` double NOT NULL DEFAULT '0',
  PRIMARY KEY  (`pk`,`sensorID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;


Y sobre los updates, no hay updates, es para unos barcos que van haciendo capturas con sensores y por cada captura añaden una entrada en la db. El script que estoy haciendo es para sincronizar los datos de los barcos con los de la base naval.

salu2


Nota 2006-11-30 13:05 @587
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10268
¿No hay ningún campo que sea del tipo autonumérico? Entonces sería muy fácil.

Otra forma de hacerlo. Si en la primera db seleccionamos la última entrada quiere decir que es lo mismo que si le preguntamos a la db cuántas filas hay. Eso se puede saber con SELECT COUNT(*) FROM ... (como pone en el manual de DBI, al hablar de rows).

Luego, en la segunda db se puede hacer un select y con LIMIT decir a partir de dónde queremos que nos dé los datos.

_________________
JF^D Perl programming


Nota 2006-12-01 11:06 @504

Perlero Nuevo
Registrado: 2005-10-06 06:36 @316
Ubicación: España
Mensajes: 50
Muchas gracias explorer ya consegui solucionarlo gracias a tu comentario :)

Ahora me encuentro con otro problema:

Como os dije el script es para sincronizar dos dbs, si os fijais en el estructura sql de la tabla hay 2 columnas que son Primary key.

Cuando intento insertar los datos en la db vieja para que este actualizada me salta error de duplicación de entradas ya que inserto entradas con el mismo valor en la columna `pk` o 'machineID'.

La cosa esta en que tienen que haber distintas entradas con el mismo valor en dichas columnas y son primary key, como puedo apañarmelas sin modificar las estructura de la tabla ya que la utiliza otro programa y no es posible modificarla.

Salu2


Última edición por AkonD el 2006-12-01 11:27 @519, editado 1 vez en total

Nota 2006-12-01 11:15 @511
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10268
No puedes.

Como mucho, usando UPDATE en lugar de INSERT, reemplazarías las entradas antiguas por las modernas en las que coincidiesen los valores de 'pk' y 'machineID'. Al ser 'Primary keys', no puede haber repeticiones.


Nota 2006-12-01 11:29 @520

Perlero Nuevo
Registrado: 2005-10-06 06:36 @316
Ubicación: España
Mensajes: 50
No se trata de reemplazar ya que son entradas nuevas. El problema es que estas nuevas tienen valores en esas dos columnas que ya existen en entradas viejas.

Yo he pensado en un ALERT TABLE antes y después de la sincronización pero sigue sin funcionar, la sentencia que usado es:

Syntax: [ Download ] [ Hide ]
Using sql Syntax Highlighting
ALTER TABLE $table DROP PRIMARY KEY
 


Sigue dandome el mismo error de duplicación de entrada


Nota 2008-08-06 04:46 @240

Perlero Nuevo
Registrado: 2007-09-09 14:44 @656
Mensajes: 67
Hola. Tengo una pregunta relacionada.
¿Cómo hiciste para conectarte a una db remota con DBI?

Yo estoy intentando con este código:

Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
use DBI;
my $dbh = DBI->connect ('DBI:mysql:database=test;host=192.168.0.1', 'root', 'mipassword');
print "CONECCION: ".$dbh."<br> \n";


Pero no me muestra nada. Estoy intentando con una máquina de la misma red interna. Las dos usan Windows y tengo instalado los módulos DBI y DBD::mysql. Además cuando lo pruebo local me anda bien.

Gracias de antemano.


Nota 2008-08-06 05:44 @281

Perlero Nuevo
Registrado: 2007-09-09 14:44 @656
Mensajes: 67
Hola de nuevo.
Acabo de encontrar una solución(¡se me caen las lágrimas de la emoción!)

En este foro explican cómo cambiarle los permisos al mysql:

http://php.org.pe/index.php?topic=259.msg777

Espero que le sirva a alguien más que mire esto.
Saludos,


Responder al tema  [ 9 mensajes ] 

Reglas del Foro
No puedes abrir nuevos temas en este Foro
No puedes responder a temas en este Foro
No puedes editar tus mensajes en este Foro
No puedes borrar tus mensajes en este Foro
No puedes enviar adjuntos en este Foro

Publicidad

Socializa

Síguenos por Twitter

Suscríbete GRATUITAMENTE al Boletín de Perl en Español

Saltar a:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Traducción al español por Huan Manwë para phpbb-es.com
phpBB SEO