Foros del Web » Programando para Internet » ASP Clásico »

Sentencia SQL (access) para mensajes del foro

Estas en el tema de Sentencia SQL (access) para mensajes del foro en el foro de ASP Clásico en Foros del Web. Buenas, Ando peleándome con la sentencia para que me ordene los mensajes del foro, ordenándolos por fecha y hora (agrupados por temas) de forma descendente. ...
  #1 (permalink)  
Antiguo 29/03/2012, 16:44
 
Fecha de Ingreso: enero-2010
Mensajes: 73
Antigüedad: 14 años, 2 meses
Puntos: 9
Sentencia SQL (access) para mensajes del foro

Buenas,

Ando peleándome con la sentencia para que me ordene los mensajes del foro, ordenándolos por fecha y hora (agrupados por temas) de forma descendente.

Esto lo consigo con esta query:

SELECT MAX(IdMensajeForo) AS NumeroMensaje, IdTema FROM MensajesForo GROUP BY IdTema ORDER BY MAX(IdMensajeForo) DESC;

Ese IdMensajeForo es la clave de la tabla, y se va incrementando en 1 según se van creando los mensajes, por lo que ordenando de forma descendente ese campo los consigo ordenar por fecha y hora y a la vez tener la clave del mensaje para identificarlo.
El campo IdTema lo necesito para identificar los diferentes temas a los que pertenece cada mensaje.

Bien, ahora mi problema viene en la paginación. Quiero mostrar 10 mensajes por página, pero no se como.

Necesitaría crear una "vista" en la que poder almacenar además de esos datos un campo que fuera del 1 hasta el count de esa query, y ya con ese campo, en la cláusula WHERE sabría separarlos. Cómo puedo hacerlo? Si esto no fuera posible, alguna otra manera?
  #2 (permalink)  
Antiguo 29/03/2012, 17:23
 
Fecha de Ingreso: enero-2010
Mensajes: 73
Antigüedad: 14 años, 2 meses
Puntos: 9
Respuesta: Sentencia SQL (access) para mensajes del foro

Veamos, parece que lo he conseguido con esto:

SELECT TOP $MENSAJES_POR_PAGINA MAX(IdMensajeForo) AS NumeroMensaje, IdTema FROM MensajesForo WHERE IdTema not in (
SELECT TOP ($NUMERO_PAGINA - 1) * $MENSAJES_POR_PAGINA IdTema AS NumeroMensaje FROM MensajesForo GROUP BY IdTema ORDER BY MAX(IdMensajeForo) DESC
) GROUP BY IdTema ORDER BY MAX(IdMensajeForo) DESC

Digamos que estoy seleccionando los primeros 10 ($MENSAJES_POR_PAGINA) mensajes que haya que no estén en las páginas anteriores ($NUMERO_PAGINA - 1) * $MENSAJES_POR_PAGINA

En el caso de que $NUMERO_PAGINA sea la 1, ($NUMERO_PAGINA - 1) * $MENSAJES_POR_PAGINA = 0, y da error, así que he tenido que ponerle:
IF $NUMERO_PAGINA = 1 Then
SQL = "SELECT TOP $MENSAJES_POR_PAGINA MAX(IdMensajeForo) AS NumeroMensaje, IdTema FROM MensajesForo GROUP BY IdTema ORDER BY MAX(IdMensajeForo) DESC"
Else
SELECT TOP $MENSAJES_POR_PAGINA MAX(IdMensajeForo) AS NumeroMensaje, IdTema FROM MensajesForo WHERE IdTema not in (
SELECT TOP ($NUMERO_PAGINA - 1) * $MENSAJES_POR_PAGINA IdTema AS NumeroMensaje FROM MensajesForo GROUP BY IdTema ORDER BY MAX(IdMensajeForo) DESC
) GROUP BY IdTema ORDER BY MAX(IdMensajeForo) DESC
End If

Última edición por Hexplore; 29/03/2012 a las 17:48 Razón: Error cuando $NUMERO_PAGINA = 1

Etiquetas: access, foro, mensajes, sentencia, sql, tabla, campos
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 00:52.