Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Ejecutar consulta "rara" entre dos tablas

Estas en el tema de Ejecutar consulta "rara" entre dos tablas en el foro de Bases de Datos General en Foros del Web. ¡Hola! Recurro a vosotros a ver si podeis solucionarme un problema que me trae dolores de cabeza desde hace bastante. Tengo dos tablas MySQL de ...
  #1 (permalink)  
Antiguo 14/01/2004, 07:40
Avatar de ferny
Il capo della mafia
 
Fecha de Ingreso: febrero-2002
Ubicación: Al final del cable
Mensajes: 10.080
Antigüedad: 22 años, 2 meses
Puntos: 55
Ejecutar consulta "rara" entre dos tablas

¡Hola!
Recurro a vosotros a ver si podeis solucionarme un problema que me trae dolores de cabeza desde hace bastante.
Tengo dos tablas MySQL de un foro phpBB:

phpbb_posts con un campo post_id numerico entero.
phpbb_posts_text con un campo post_id numerico entero.

Hay registros post_id que no existen en la primera tabla, pero sí en la segunda. El objetivo es borrar los registros que están en la tabla segunda y no están en la primera.

Por ejemplo:

phpbb_posts

1
2
3
5
7
8

phpbb_posts_text

1
2
3
4
5
6
7
8

Al ejecutar la consulta, se deben borrar los registros 4 y 6 de la tabla phpbb_posts_text

Me gustaría poder hacerlo con una única consulta a la base de datos.

Un saludo y gracias
__________________
www.mundodivx.com || www.mundodivx.org

Pon tu mano en un horno caliente durante un minuto y te parecerá una hora.
Siéntate junto a una chica preciosa durante una hora y te parecerá un minuto.
Eso es la relatividad.

Última edición por ferny; 14/01/2004 a las 07:44
  #2 (permalink)  
Antiguo 14/01/2004, 08:40
 
Fecha de Ingreso: abril-2003
Ubicación: Madrid
Mensajes: 707
Antigüedad: 21 años
Puntos: 0
No utilizo MySQL, pero en SQL-Server con esto funciona

DELETE phpbb_posts_text
FROM phpbb_posts_text LEFT JOIN phpbb_posts ON phpbb_posts_text.post_id = phpbb_posts.post_id
WHERE (phpbb_posts.post_id) Is Null

Espero que te sirva
  #3 (permalink)  
Antiguo 14/01/2004, 08:58
Avatar de ferny
Il capo della mafia
 
Fecha de Ingreso: febrero-2002
Ubicación: Al final del cable
Mensajes: 10.080
Antigüedad: 22 años, 2 meses
Puntos: 55
Muchismas gracias, funciona pero no funciona.
Me explico: en la base de datos que tengo en el ordenador ha funcionado perfectamente, pero el problema es que ejecuto exactamente la misma consulta en el servidor donde tengo la pagina y me da error:

#1064 - You have an error in your SQL syntax near 'phpbb_posts_text FROM phpbb_posts_text LEFT JOIN phpbb_posts ON phpbb_posts_tex' at line 1

La versión de MySQL donde sí funciona es la 4.0.16, y la de donde no funciona es la 3.23.58 ¿Será por eso?
__________________
www.mundodivx.com || www.mundodivx.org

Pon tu mano en un horno caliente durante un minuto y te parecerá una hora.
Siéntate junto a una chica preciosa durante una hora y te parecerá un minuto.
Eso es la relatividad.
  #4 (permalink)  
Antiguo 14/01/2004, 17:17
Avatar de ferny
Il capo della mafia
 
Fecha de Ingreso: febrero-2002
Ubicación: Al final del cable
Mensajes: 10.080
Antigüedad: 22 años, 2 meses
Puntos: 55
Sin embargo si me deja seleccionar, o sea consulta si funciona:

SELECT *
FROM phpbb_posts_text LEFT JOIN phpbb_posts ON phpbb_posts_text.post_id = phpbb_posts.post_id
WHERE (phpbb_posts.post_id) Is Null;

Lo único que cambio es que al principio pone SELECT * en vez de DELETE phpbb_posts_text

Pero no me da la opción para que esos registros seleccionados los pueda borrar manualmente

Incluso probé a crear un PHP sólo para hacer la consulta, y el resultado es el mismo, no deja en mi servidor, pero en local si que funciona

No se, esto me ralla... ¿habrá alguna alternativa?
__________________
www.mundodivx.com || www.mundodivx.org

Pon tu mano en un horno caliente durante un minuto y te parecerá una hora.
Siéntate junto a una chica preciosa durante una hora y te parecerá un minuto.
Eso es la relatividad.
  #5 (permalink)  
Antiguo 14/01/2004, 17:30
Avatar de ferny
Il capo della mafia
 
Fecha de Ingreso: febrero-2002
Ubicación: Al final del cable
Mensajes: 10.080
Antigüedad: 22 años, 2 meses
Puntos: 55
Bueno, al final lo he resuelto con este PHP:

Código PHP:
<?
mysql_connect
("XXX.XXX.XXX.XXX","Usuario","Contraseña");
mysql_select_db("database");
$result=mysql_query("SELECT * FROM phpbb_posts_text LEFT JOIN phpbb_posts ON phpbb_posts_text.post_id = phpbb_posts.post_id WHERE (phpbb_posts.post_id) IS NULL");
while (
$row=mysql_fetch_array($result)) {
    
mysql_query("DELETE FROM phpbb_posts_text WHERE post_id = $row[0]");
    echo 
$row[0]." ... borrado!<br>";
}
mysql_free_result($result);
mysql_close();
?>
Un remedio casero pero que ha funcionado, total no eran ni 1000 los registros a borrar, ha tardado un par de segundos en hacerlo

Por cierto Teri, gracias de nuevo, sin tu ayuda no habría podido hacerlo

Un abrazo
__________________
www.mundodivx.com || www.mundodivx.org

Pon tu mano en un horno caliente durante un minuto y te parecerá una hora.
Siéntate junto a una chica preciosa durante una hora y te parecerá un minuto.
Eso es la relatividad.
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 17:55.