Hola Seanchan
Muchas gracias por tu respuesta.
Perdón, he confundido la versión de php con la versión de MySql. Según el phpinfo de mi servidor, la versión es: Client API version 4.1.20 y la de php la 4.4.1
Entiendo que a partir de la versión 4.1, MySql si admite subconsultas según se desprende de esta página
http://sunsite.mff.cuni.cz/MIRRORS/f...b-selects.html pero no he sido capaz de hacerlo. Al final he solucionado el problema creando dos nuevas tablas con los campos que me interesaba comprobar si habían variado y contrastándolo entre las dos tablas.
El error que me daba era "Internal Server Error. The server encountered an internal error or misconfiguration and was unable to complete your request." en el script pòr lo que he limitado la consulta a 1000 registros y he de hacerla varias veces seguidas.
Código PHP:
//Creamos la tabla1 unicamente con los campos que nos interesa comprobar a partir de la tabla
//antigua
$crear_tabla=mysql_query("CREATE TABLE `base`.`tabla1` (
`nombre` varchar( 177 ) NOT NULL default '',
`url` varchar( 255 ) NOT NULL default '',
KEY `nombre` ( `nombre` )
) TYPE = MYISAM",$idConexion0);
$cargar_tabla=mysql_query("INSERT INTO `base`.`tabla1` SELECT nombre,url FROM `base`.`tabla_antigua`",$idConexion0);
//Creamos la segunda tabla a partir de la tabla nueva con la que queremos comprobar las
//actualizaciones
$crear_tabla=mysql_query("CREATE TABLE `base`.`tabla2` (
`nombre` varchar( 177 ) NOT NULL default '',
`url` varchar( 255 ) NOT NULL default '',
KEY `nombre` ( `nombre` )
) TYPE = MYISAM",$idConexion0);
$cargar_tabla2=mysql_query("INSERT INTO `base`.`tabla2` SELECT nombre,url FROM `base`.`tabla_nueva`",$idConexion0);
//buscamos en la tabla 2 los registros cuyo campo url sea igual en ambas tablas o sea que
//exista también en la tabla 1 y procedemos a borrar en cada una de las tablas los que van
//siendo comprobados.
//La consulta está limitada a 1000 registros ya que si no
//falla.
//Este script hay que ejecutarlo varias veces en función del número de registros de las tablas
//hasta que no queden ya registros que comprobar (como se van borrando, cada vez comprueba registros diferentes
$resultado=mysql_query("select url from tabla2",$idConexion0);
while((@$row=mysql_fetch_array($resultado))&&($cantidad<='1000')){
$url=$row["url"];
mysql_query("delete from tabla2 where url='$url'");
mysql_query("delete from tabla1 where url='$url'");
$cantidad++;
}
//Una vez han sido comprobados todos los registros hacemos una consulta a la tabla2 una vez
//depurada
$resultado=mysql_query("select * from tabla2",$idConexion0);
while(@$row=mysql_fetch_array($resultado)){
$nombre=$row["nombre"];
$url=$row["url"];
print $nombre." - ".$url;
}
Ya se que es una chapuza sobre todo porque hay que ejecutarlo varias veces hasta comprobar todos los registros de la base. Si alguien tiene una mejor idea se lo agradecería mucho. Mi página está alojada en un servidor
y por tanto no puedo variar los parámetros. ¿Alguien sabe como evitar que falle el script por tiempo de ejecución?
Creo que el problema viene de que el script falla por falta de tiempo de ejecución en el servidor ya que si limito el número de registros a comprobar si funciona. Probablemente si limitara el número de registros en la subconsulta también funcionaría
Un saludo