Foros del Web » Programando para Internet » PHP »

Un delete ... Raro

Estas en el tema de Un delete ... Raro en el foro de PHP en Foros del Web. Buenas, no se me ocurre como hacer esto, a ver si me dais una idea de por donde tirar. Yo tengo un chat, pongamos que ...
  #1 (permalink)  
Antiguo 04/03/2009, 04:17
 
Fecha de Ingreso: enero-2009
Mensajes: 212
Antigüedad: 15 años, 3 meses
Puntos: 4
Un delete ... Raro

Buenas, no se me ocurre como hacer esto, a ver si me dais una idea de por donde tirar.

Yo tengo un chat, pongamos que tengo esta tabla :

id
chat
mensaje

El campo chat es por idchat, hay digamos 10 chat, cada chat con sus mensajes propios y con sus cosas.

Yo en el chat unicamente muestro los ultimos 20 mensajes, asi que pense, pues nada tengo que poner que cuando un usuario entra en el chat automaticamente me borre los mensajes a partir del 20 ... y ahi es mi lio. ¿Como hago esto?.

Explico mejor :

1 - Mensaje a
2 - mensaje B
3 - Mensaje C
.
.
.
.
.
21 - Mensaje AA
22 - Mensaje BB

En mi chat solo mostrare del 22 al 2, el 1 ya no deberia mostrarlo y deberia borrarlo pero ¿como hago esto en un mysql?.

Podria recorrer el sql y saber el id que tengo que borrar y demas pero lo suyo es hacerlo solo en un sql y la verdad no caigo como hacerlo.

Pense en algo asi :


delete from chat where id < (select max(id) from chat where chat = id_chat limit 0,21) and chat = id_chat

Pero claro no me va XD
  #2 (permalink)  
Antiguo 04/03/2009, 04:59
Avatar de BlogInn  
Fecha de Ingreso: febrero-2009
Mensajes: 79
Antigüedad: 15 años, 2 meses
Puntos: 3
Respuesta: Un delete ... Raro

A ver si te he entendido, quieres que cada vez que alguien se conecte al chat se borren todos los mensajes menos los 20 ultimos escritos no? Si es asi y tu cada vez que escribes un mensaje lo vas a hacer a continuación de los que ya hay en la base de datos asi que con esto yo pienso que te iria:



DELETE mensaje FROM nombre_base WHERE idchat=numerodesala AND id<21;
  #3 (permalink)  
Antiguo 04/03/2009, 05:04
 
Fecha de Ingreso: octubre-2004
Mensajes: 2.627
Antigüedad: 19 años, 5 meses
Puntos: 48
Respuesta: Un delete ... Raro

Pues si es raro el planteamiento. Se me ocurre otra forma de decirlo: quieres borrar todos los registros que no estan en tu seleccion.

DELETE FROM chat WHERE chat=id_chat AND id NOT IN (SELECT id FROM chat ORDER BY id DESC LIMIT 20)

La subquery del NOT IN debe ser la query de los datos que muestras.
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 09:41.