Foros del Web » Programando para Internet » PHP »

PHP/SQL: Convertir SELECT a DELETE

Estas en el tema de PHP/SQL: Convertir SELECT a DELETE en el foro de PHP en Foros del Web. Buenas, quiero hacer un delete que basicamente sea una forma corta de un select que he hecho que para cada uno hace un delete. Al ...
  #1 (permalink)  
Antiguo 28/08/2010, 07:11
 
Fecha de Ingreso: junio-2009
Mensajes: 309
Antigüedad: 14 años, 10 meses
Puntos: 5
PHP/SQL: Convertir SELECT a DELETE

Buenas, quiero hacer un delete que basicamente sea una forma corta de un select que he hecho que para cada uno hace un delete. Al juntar varias tablas no consigo hacerlo bien. Lo que hago es lo siguiente:

Código PHP:

$q_borrar
=mysql_query("SELECT elementos_lista_favoritos.ID_LISTA FROM elementos_lista_favoritos, compartir_lista_favoritos, listas_favoritos WHERE elementos_lista_favoritos.ID_ELEMENTO=$elemento AND elementos_lista_favoritos.TIPO_WIDGET=1 AND (elementos_lista_favoritos.ID_LISTA=listas_favoritos.ID AND listas_favoritos.ID_USUARIO=$id_usuario) OR (compartir_lista_favoritos.ID_LISTA=elementos_lista_favoritos.ID_LISTA AND compartir_lista_favoritos.ID_USUARIO=$id_usuario AND PERMISOS=3)");
        if(
mysql_num_rows($q_borrar)){
            while(
$r_borrar=mysql_fetch_array($q_borrar)){
            
$id_lista=$r['ID_LISTA'];
            
mysql_query("DELETE FROM elementos_lista_favoritos WHERE ID_LISTA=$id_lista AND TIPO_WIDGET=1 AND ID_ELEMENTO=$elemento");
            }
        
mysql_free_result($q_borrar);
        } 

Sabeis alguna forma de cambiar el primer select a un delete directamente?

Muchas gracias.
  #2 (permalink)  
Antiguo 28/08/2010, 08:51
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 8 meses
Puntos: 1532
Respuesta: PHP/SQL: Convertir SELECT a DELETE

si ambas tablas tienen una relación (foreign key) uno a muchos con el modo ONDELETE CASCADE, solo necesitas borrar el registro de la entidad fuerte, y se eliminan los registros dependientes
  #3 (permalink)  
Antiguo 29/08/2010, 06:08
 
Fecha de Ingreso: junio-2009
Mensajes: 309
Antigüedad: 14 años, 10 meses
Puntos: 5
Respuesta: PHP/SQL: Convertir SELECT a DELETE

Pero en realidad solo tiene que borrar un registro, el que esté en la tabla elementos_lista_favoritos, solo que lo tiene que borrar si tiene relacion con el resto. ¿Es esto lo que dices? Por que al hablar de borrar todos los registros dependientes me has confundido ya que si es lo que entiendo también borraría los registros de las otras tablas.
  #4 (permalink)  
Antiguo 29/08/2010, 08:51
Avatar de xalupeao  
Fecha de Ingreso: mayo-2008
Ubicación: Santiago, Chile
Mensajes: 749
Antigüedad: 15 años, 11 meses
Puntos: 12
Respuesta: PHP/SQL: Convertir SELECT a DELETE

lee sobre las relaciones en las tablas de sql. y Recuerda para usar foreign key en MySQL debes usar el motor InnoDB.

Saludos.
__________________
Hosting en Chile en Silverhost - La solución en Hosting en Chile.
  #5 (permalink)  
Antiguo 30/08/2010, 11:28
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: PHP/SQL: Convertir SELECT a DELETE

Podrias hacerlo asi

Código:
delete from tabla where id in (select id from tabla) and widget=1
Saludos!!
  #6 (permalink)  
Antiguo 30/08/2010, 12:35
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: PHP/SQL: Convertir SELECT a DELETE

No puedes convertir un SELECT en DELETE. AL menos no puedes hacerlo desde la optica de SQL, porque ambas consultas son incompatibles.
El problema base es que DELETE tiene dos formas distintas de escribirse:
Código MySQL:
Ver original
  1. DELETE a, b, c
  2. FROM m, n
  3. [WHERE condicion];
Código MySQL:
Ver original
  1. [WHERE condicion];
La segunda de las formas es obviamente incompatible y exime de comentarios: En ella se elimina de la tabla "m" todo lo que cumpla la condicion.

Pero el problema básico es la primera: En ese contexto, a, b, c no son campos sino tablas, por lo que no representan lo mismo que en un SELECT.
Esa sentencia indica que se borre de las tablas a, b y c aquello que esté presente en a junta m, n. Como se trata de objetos incompatibles, no es posible hacer una transformación directa entre las sentencias.

¿Se entiende?

Creo que mejor usas dos funciones diferentes para esta tarea. Te ahorraras problemas.

P.D.: Cuando no encuentras documentación sobre un caso en Google, lo más probable es que no se pueda hacer...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 31/08/2010, 15:11
 
Fecha de Ingreso: junio-2009
Mensajes: 309
Antigüedad: 14 años, 10 meses
Puntos: 5
Respuesta: PHP/SQL: Convertir SELECT a DELETE

Muchas gracias gnzsoloyo, entonces las dos funciones que dices son tal y como las usé en el ejemplo que puse? es decir, primero select de lo que quiero y luego un delete?

De ser asi podria poner la ejecucion del delete fuera del while y ir añadiendo mediante OR para en vez de hacer muchos deletes hacer solo uno con muchos OR, no?

Muchas gracias
  #8 (permalink)  
Antiguo 31/08/2010, 18:25
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: PHP/SQL: Convertir SELECT a DELETE

Más o menos. Si ID_LISTA es PK de la tabla elementos_lista_favoritos, entonces el resto de las condiciones es irrelevante porque con ID_LISTA sería suficiente para identificar los registros a borrar.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 31/08/2010, 18:44
 
Fecha de Ingreso: agosto-2010
Ubicación: santiago, CHILE
Mensajes: 564
Antigüedad: 13 años, 8 meses
Puntos: 9
Respuesta: PHP/SQL: Convertir SELECT a DELETE

//...ordene un poco tu consulta...x favor utiliza alias


$sql = "SELECT elf.ID_LISTA FROM elementos_lista_favoritos elf,";
$sql .= " compartir_lista_favoritos clf, listas_favoritos lf";
$sql .= " WHERE elf.ID_ELEMENTO=$elemento AND elf.TIPO_WIDGET=1";
$sql .= " AND (elf.ID_LISTA=lf.ID AND lf.ID_USUARIO=$id_usuario)";
$sql .= " OR (clf.ID_LISTA=elf..ID_LISTA";
$sql .= " AND clf.ID_USUARIO=$id_usuario AND PERMISOS=3)";


//...esto es lo primero q vi...de q tabla es el campo PERMISOS ???
  #10 (permalink)  
Antiguo 31/08/2010, 19:15
 
Fecha de Ingreso: agosto-2010
Ubicación: santiago, CHILE
Mensajes: 564
Antigüedad: 13 años, 8 meses
Puntos: 9
Respuesta: PHP/SQL: Convertir SELECT a DELETE

//....el id_lista del delete no lo sabes lo estas sacando con el select anterior y no necesitas preguntar mas con ese eliminas...con el IDLISTA = $r_borrar['id_lista'];
  #11 (permalink)  
Antiguo 01/09/2010, 07:48
 
Fecha de Ingreso: junio-2009
Mensajes: 309
Antigüedad: 14 años, 10 meses
Puntos: 5
Respuesta: PHP/SQL: Convertir SELECT a DELETE

Ok muchas gracias.

Voy a revisar bien todo el script al completo y sobretodo usaré alias y intentaré hacer subconsultas en el FROM en vez de en el WHERE.

Voy a darle, muchas gracias!

Última edición por leif_sk8er; 01/09/2010 a las 07:59

Etiquetas: delete, select
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 02:41.