elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  Bases de Datos (Moderador: Carloswaldo)
| | | |-+  DELETE de resultado de un SELECT
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: DELETE de resultado de un SELECT  (Leído 7,620 veces)
XafiloX

Desconectado Desconectado

Mensajes: 130


Ver Perfil
DELETE de resultado de un SELECT
« en: 10 Febrero 2011, 11:36 am »

Hola! Escribo este tema por si me podéis decir si es posible hacer una consulta que sea un delete de los resultados (varias filas) de un select (todo en una sola consulta...).

Es decir, yo tengo estas dos consultas:

Código
  1. SELECT rid FROM web_messages WHERE `del_time` <= UNIX_TIMESTAMP() AND `message_type` = '3' AND `rid` != '0' GROUP BY `rid` ORDER BY `del_time` DESC
Y esta en un bucle que recorre todos los resultados de la anterior:
Código
  1. DELETE FROM web_reportes WHERE `rid` = 'cada_resultado_anterior' LIMIT 1;

Y me gustaría saber si hay alguna menra de unir las dos querys en 1 sola, funcionando con todos los resultados de la primera (no con uno solo).

Un saludo y gracias por la ayuda!


En línea

Novlucker
Ninja y
Colaborador
***
Desconectado Desconectado

Mensajes: 10.683

Yo que tu lo pienso dos veces


Ver Perfil
Re: DELETE de resultado de un SELECT
« Respuesta #1 en: 10 Febrero 2011, 12:59 pm »

Código
  1. DELETE FROM web_reportes WHERE `rid` IN (SELECT DISTINCT rid FROM web_messages WHERE `del_time` <= UNIX_TIMESTAMP() AND `message_type` = '3' AND `rid` != '0');

Tampoco necesitas el GROUP y ORDER

Saludos


« Última modificación: 10 Febrero 2011, 13:57 pm por Novlucker » En línea

Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD
"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein
XafiloX

Desconectado Desconectado

Mensajes: 130


Ver Perfil
Re: DELETE de resultado de un SELECT
« Respuesta #2 en: 11 Febrero 2011, 08:57 am »

Ah,muchísimas gracias,luego cuando llegue a mi casa lo pruebo,que ahora estoy en la facultad...lo del group y el orden by si los necesita porque en la misma tabla siempre hay varias filas con el mismo rid...
En línea

.mokk.

Desconectado Desconectado

Mensajes: 177



Ver Perfil
Re: DELETE de resultado de un SELECT
« Respuesta #3 en: 11 Febrero 2011, 09:45 am »

pero eso es solo para ordenar que no? y si vas a eliminar todo eso am creo que seria demas en el code
En línea

XafiloX

Desconectado Desconectado

Mensajes: 130


Ver Perfil
Re: DELETE de resultado de un SELECT
« Respuesta #4 en: 11 Febrero 2011, 18:21 pm »

Ah, ya, ya veo lo que decís...pensaba que con ese order by conseguiría agrupar de manera que me cogiese siempre el mayor valor de del_time, pero ya veo que no es así, que lo que hace es darme el resultado ordenado...

En verdad yo lo que quiero es que, a partir de una tabla en la que suele haber varias filas con un mismo rid y distintos del_time, obtener el rid solo de aquellas filas cuyo mayor del_time (de entre todas las que comparten el rid) sea menor que el tiempo actual, y esa lista de rids utilizarla para borrar los elementos que tengan ese rid en otra tabla...

Vamos, que si yo tengo una tabla que tiene (entre otras cosas) lo siguiente:

riddel_time
cf5b1f86eb50f1f39835854119dc5c1c1297437046
cf5b1f86eb50f1f39835854119dc5c1c1297440385
050c168ddc6c20dba9612144c68079061297435430
050c168ddc6c20dba9612144c68079061297435430
y el timestamp actual es 1297438046, tendría que seleccionar (y borrar) las que tengan rid 050c168ddc6c20dba9612144c6807906, ya que en el caso del otro rid, 1297437046 si es menor que el timestamp, pero 1297440385 no...

Entonces, la que query que he escrito la tengo por ahora así (aplicando ya lo del delete de novlucker):
Código
  1. DELETE FROM web_reportes WHERE `rid` IN (SELECT rid FROM(SELECT rid, MAX(del_time) AS max_del_time FROM web_messages WHERE message_type = '3' AND rid != '0' GROUP BY rid)sub WHERE sub.max_del_time <= UNIX_TIMESTAMP())

¿Consideráis que así está bien?¿Se os ocurre alguna posible optimización?

Gracias por la ayuda
« Última modificación: 11 Febrero 2011, 18:30 pm por XafiloX » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Delete ITEM
Programación Visual Basic
NetWar 5 2,495 Último mensaje 24 Marzo 2008, 12:17 pm
por jmordenata
SOLUCIONADO: Delete en mysql
Bases de Datos
mk_137 0 3,233 Último mensaje 28 Diciembre 2010, 13:24 pm
por mk_137
[Ayuda] Error con delete[]... algo extraño... « 1 2 »
Programación C/C++
BlackZeroX 17 7,409 Último mensaje 14 Julio 2011, 07:10 am
por BlackZeroX
[C++] Duda con new y delete[] o delete Tratando de hacer matriz dinamica
Programación C/C++
capsulasinformaticas 7 4,943 Último mensaje 21 Marzo 2013, 18:03 pm
por capsulasinformaticas
[Ayuda urgente!] Sacar por pantalla resultado de un select
Desarrollo Web
MacOc 3 2,421 Último mensaje 15 Febrero 2017, 23:28 pm
por engel lex
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines