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

Ordenar Registros como en el foro

Estas en el tema de Ordenar Registros como en el foro en el foro de Bases de Datos General en Foros del Web. Hola amigos, he creado una tabla 'foros' donde se almacenan las consultas y respuestas de la gente, la tabla tiene esta estructura: CREATE TABLE `foros` ...
  #1 (permalink)  
Antiguo 11/08/2005, 06:32
 
Fecha de Ingreso: febrero-2003
Mensajes: 47
Antigüedad: 21 años, 9 meses
Puntos: 0
Ordenar Registros como en el foro

Hola amigos, he creado una tabla 'foros' donde se almacenan las consultas y respuestas de la gente, la tabla tiene esta estructura:

CREATE TABLE `foros` (
`cod_for` INTEGER(11) NOT NULL AUTO_INCREMENT,
`codtipo_for` INTEGER(11) NOT NULL DEFAULT '0',
`codpreg_for` INTEGER(11) NOT NULL DEFAULT '0',
`fecha_for` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',
`tit_for` VARCHAR(70) NOT NULL,
PRIMARY KEY (`cod_for`)
);

Descripcion:

* cod_for --> Código del registro autonumerico

* codtipo_for --> me dice si el registro es una consulta (1) o es una respuesta (2) a una consulta

* codpreg_for --> para una respuesta (tipo 2) almacena cual es la pregunta (tipo 1) a la que contesta. En una consulta es igual que cod_for

* fecha_for --> fecha de publicación

* tit_for --> Titulo de la consulta o respuesta

Mi problema es que quiero mostrar SOLO las consultas (tipo 1) pero ordenadas como en los foros, es decir que en primer lugar salga aquella consulta que se haya respondido hace menos tiempo, o una consulta realizada que no tenga todavía respuesta.

Ejemplo:

1) el foro en un instante 1 está así:

Tit ------------ Ultimo mensaje
bla.bla -------- 09/08/2005
bla2.bla ------- 05/08/2005
bla3.bla ------- 04/08/2005


2) un forero responde a la consulta 'bla3.bla'

3) al volver a mostrar el foro debe ordenarse así

Tit ------------ Ultimo mensaje
bla3.bla ------- 10/08/2005
bla.bla -------- 09/08/2005
bla2.bla ------- 05/08/2005

Gracias, por vuestra ayuda.
  #2 (permalink)  
Antiguo 11/08/2005, 06:45
Avatar de Vice  
Fecha de Ingreso: agosto-2003
Mensajes: 613
Antigüedad: 21 años, 3 meses
Puntos: 2
Código:
select * from foros
order by fecha_for desc limit 3
Un saludo.
__________________
Estoy contagiado de Generación-I
  #3 (permalink)  
Antiguo 11/08/2005, 07:06
 
Fecha de Ingreso: febrero-2003
Mensajes: 47
Antigüedad: 21 años, 9 meses
Puntos: 0
Perdona, creo que me he explicado mal, con esa consulta mostraría los tres últimos registros de la tabla.

Pero, yo solo quiero que muestre los que sean de tipo 1 (consultas, esto es tambien facil codtipo_foro = 1). Pero una vez que tenemos los registros de tipo 1 ordenarlos de tal forma que aparezcan primero las últimas consultas contestadas ... es decir en este foro, si alguien responde a un consulta de hace un mes, que estaba en la página 3 del foro, la consulta pasa a mostrarse en primera posición del foro.

Es decir mostrar las consultas de tipo 1, pero ordenar la máxima fecha entre la consulta y todas las respuestas que tenga.

No se si me explico bien, pero lo que quiero es mostrar siguiendo el orden de cualquier foro.
  #4 (permalink)  
Antiguo 12/08/2005, 04:36
Avatar de Vice  
Fecha de Ingreso: agosto-2003
Mensajes: 613
Antigüedad: 21 años, 3 meses
Puntos: 2
Si he entendido bien la estructura de la tabla y los datos que contienen, la consulta sería esta:
Código:
select pregunta.tit_for, max(respuesta.fecha_for) fecha
from foros pregunta join foros respuesta on a.cod_for = codpreg_for
where a.tipo=1
order by 2 desc limit 3
No hace falta el outer porque el registro de tipo 1 de la tabla "pregunta", al menos, se cruzará con sigo mismo en "respuesta", con lo que, como mínimo aparecerá su fecha.
Espero que te ayude.
Un saludo.
__________________
Estoy contagiado de Generación-I
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 23:06.