Ver Mensaje Individual
  #6 (permalink)  
Antiguo 10/03/2011, 14:58
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 meses
Puntos: 447
Respuesta: Ultimos 4 post de cada foro_id

Hola de nuevo compañer@ cloner:

Aunque no debería continuar con este post debido a que tu pregunta está planteada para MySQL y esto es un foro de SQL Server sí me gustaría hacerte un comentario al respecto de tu último post.

Creo que ni siquiera le echaste un vistazo a la liga que te puse. La solución que planteas es válida sólo para tres foros, pero según tu lógica si tuvieras 100 foros y quisieras obtener los últimos cuatro topic's de cada uno de ellos entonces !!!tendrías que hacer 100 JOIN's!!!, esto termina por ser poco práctico no crees???

Te pongo un script de cómo se realizaría simulando el ROW_NUMBER(), es decir la explicación de la liga que te puse... igual y no le vas a hacer caso, pero creo que si alguien más tiene un problema similar le puede ayudar.

Código MySQL:
Ver original
  1. mysql> create table phpbb_topics (forum_id int, topic_id int, campo varchar(10))
  2. ;
  3. Query OK, 0 rows affected (0.08 sec)
  4.  
  5. mysql> insert into phpbb_topics values (1, 1, '1.1'),(1, 2, '1.2'),(1, 3, '1.3')
  6. ,(1, 4, '1.4'),(1, 5, '1.5'),(2, 1, '2.1'),(2, 2, '2.2'),(2, 3, '2.3'),(3, 1, '3
  7. .1'),(3, 2, '3.2'),(3, 3, '3.3'),(3, 4, '3.4');
  8. Query OK, 12 rows affected (0.02 sec)
  9. Records: 12  Duplicates: 0  Warnings: 0
  10.  
  11. mysql> select * from phpbb_topics;
  12. +----------+----------+-------+
  13. | forum_id | topic_id | campo |
  14. +----------+----------+-------+
  15. |        1 |        1 | 1.1   |
  16. |        1 |        2 | 1.2   |
  17. |        1 |        3 | 1.3   |
  18. |        1 |        4 | 1.4   |
  19. |        1 |        5 | 1.5   |
  20. |        2 |        1 | 2.1   |
  21. |        2 |        2 | 2.2   |
  22. |        2 |        3 | 2.3   |
  23. |        3 |        1 | 3.1   |
  24. |        3 |        2 | 3.2   |
  25. |        3 |        3 | 3.3   |
  26. |        3 |        4 | 3.4   |
  27. +----------+----------+-------+
  28. 12 rows in set (0.00 sec)
  29.  
  30. mysql> #para obtener sólo los últimos dos topic's de cada forum_id
  31. mysql> SELECT T1.forum_id, T1.topic_id, T1.campo FROM(
  32.     -> SELECT o.forum_id, o.topic_id, o.campo,
  33.     -> FIND_IN_SET(o.topic_id ,
  34.     -> (
  35.     -> SELECT GROUP_CONCAT(topic_id ORDER BY topic_id DESC)
  36.     -> FROM phpbb_topics  i WHERE i.forum_id = o.forum_id)
  37.     -> ) AS rate_index FROM phpbb_topics o
  38.     -> ) T1
  39.     -> WHERE rate_index <= 2;
  40. +----------+----------+-------+
  41. | forum_id | topic_id | campo |
  42. +----------+----------+-------+
  43. |        1 |        4 | 1.4   |
  44. |        1 |        5 | 1.5   |
  45. |        2 |        2 | 2.2   |
  46. |        2 |        3 | 2.3   |
  47. |        3 |        3 | 3.3   |
  48. |        3 |        4 | 3.4   |
  49. +----------+----------+-------+
  50. 6 rows in set (0.00 sec)

Esto serviría PARA CUALQUIER NÚMERO DE FOROS.

Saludos
Leo