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

Varios forearch a una misma consulta

Estas en el tema de Varios forearch a una misma consulta en el foro de Mysql en Foros del Web. Hola a todos, tengo un problemilla. es que quiro mostrar los ultimos post de cada categoria en el index, pero solamente lo logro haciendo varias ...
  #1 (permalink)  
Antiguo 26/07/2012, 12:40
 
Fecha de Ingreso: diciembre-2010
Mensajes: 160
Antigüedad: 13 años, 4 meses
Puntos: 1
Varios forearch a una misma consulta

Hola a todos, tengo un problemilla. es que quiro mostrar los ultimos post de cada categoria en el index, pero solamente lo logro haciendo varias consultas a la BD, pero consume mucho recursos. Quisiera saber si es posible, hacer distintos forearch a una misma consulta.

En este momento tengo esta consulta a la BD:

Código PHP:
//Consulta Posts Recientes 
    
if($id == ''){ 

    
//Consulta de posts normales 
    
$request=db_query(
        SELECT m.ID_MEMBER, m.ID_TOPIC, m.body, m.imgport, c.ID_CAT, subject, c.name, t.ID_BOARD, posterName, puntos, m.hiddenOption, posterTime, denuncias 
        FROM {$db_prefix}messages as m, {$db_prefix}boards as c, {$db_prefix}topics as t 
        WHERE c.ID_BOARD=m.ID_BOARD AND t.ID_TOPIC=m.ID_TOPIC AND t.isSticky = 0 {$cat_condition} 


        ORDER BY m.ID_TOPIC DESC 
        LIMIT $RegistrosAEmpezar,$limit_posts"
__FILE____LINE__); 
    }else{ 
    
$request=db_query(
        SELECT m.ID_MEMBER, m.ID_TOPIC, m.body, m.imgport, c.ID_CAT, subject, c.name, t.ID_BOARD, posterName, puntos, m.hiddenOption, posterTime, denuncias 
        FROM {$db_prefix}messages as m, {$db_prefix}boards as c, {$db_prefix}topics as t 
        WHERE c.ID_BOARD=m.ID_BOARD AND t.ID_TOPIC=m.ID_TOPIC AND t.isSticky = 0 {$cat_condition} 


        ORDER BY m.ID_TOPIC DESC 
        LIMIT $RegistrosAEmpezar,$limit_posts"
__FILE____LINE__); 
    } 

       while(
$posts mysql_fetch_array($request)) 
    { 


            
$context['normal_posts'][] = array( 
            
'ID_MEMBER' => $posts['ID_MEMBER'], 
            
'id' => $posts['ID_TOPIC'], 
            
'body' => $posts['body'], 
            
'imgport' => $posts['imgport'], 
            
'title' => $posts['subject'], 
            
'category' => $posts['name'], 
            
'id_category' => $posts['ID_BOARD'], 
            
'user' => $posts['posterName'], 
            
'date' => $posts['posterTime'], 
            
'puntos' => $posts['puntos'], 
            
'denuncias' => $posts['denuncias'], 

        ); 
    } 

     
mysql_free_result($request); 
Donde con un forearch, muestro los ultimos post publicados en el sitio

Código PHP:
foreach ($context['normal_posts2'] as $np
      { 

        
$hcode = array(' ',',','?'); 
        
$bcode = array('-','-','-'); 
        
$titleurl2 str_replace($hcode$bcode$np['title']); 

        echo
'<div id="fragment-'; if($cont2 <= 4) { echo $cont2;  ++$cont2;} echo'" class="ui-tabs-panel '; if($cont2 <= 2) { echo $cont2;  }else{ echo'ui-tabs-hide'; } echo'" > 
            <img width="400"  src="'
,$np['imgport'],'" alt="',$np['title'],'" /> 
             <div class="info" > 
                <a href="http://infokgeek.com/posts/'
$np['id'],'/'; echo $titleurl2; echo'.html" >'; echo substr($np['title'], 040); echo'...</a> 
                <p>'
;echo 
        
substr(bbcode($np['body']), 0110); echo'... </p> 
             </div> 
        </div>'


      } 
Lo que quiero hacer, como dije antes es hacer varios forearch a una misma consulta para mostrar los ultimos post de cada categoria. es esto posible? cualquier ayuda se agradeceria!! Saludos!
  #2 (permalink)  
Antiguo 26/07/2012, 13:46
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Varios forearch a una misma consulta

Hola luciana_uru:

En primer lugar, no es correcto que pongas código PHP ni de ningún otro lenguaje de programación en este foro. Este es exclusivo de MySQL y por políticas del foro no debemos contestar preguntas de programación. Existen los foros propios del lenguaje que estás utilizando.... te invito a que expongas ahí tu pregunta.

En cuanto a tu pregunta, te dejo un ejemplo que igual y te puede servir... supongamos que tenemos esta tabla;

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tabla;
  2. +------+-------------+---------------------+
  3. | id   | descripcion | fecha               |
  4. +------+-------------+---------------------+
  5. |    1 | uno         | 2012-07-26 11:57:00 |
  6. |    1 | one         | 2012-07-26 09:58:23 |
  7. |    1 | un          | 2012-07-26 10:00:51 |
  8. |    2 | dos         | 2012-07-26 13:10:36 |
  9. |    2 | two         | 2012-07-26 07:30:29 |
  10. |    2 | deux        | 2012-07-26 11:16:47 |
  11. |    3 | tres        | 2012-07-26 08:29:21 |
  12. |    3 | three       | 2012-07-26 09:43:22 |
  13. |    3 | trois       | 2012-07-26 10:20:45 |
  14. +------+-------------+---------------------+
  15. 9 rows in set (0.00 sec)

Observa que hay tres registros por cada id, cada uno con una fecha distinta. Si quisiéramos obtener el último registro para cada id podríamos hacer esto:

Código MySQL:
Ver original
  1. mysql> SELECT id, MAX(fecha) max_fecha
  2.     -> FROM tabla GROUP BY id;
  3. +------+---------------------+
  4. | id   | max_fecha           |
  5. +------+---------------------+
  6. |    1 | 2012-07-26 11:57:00 |
  7. |    2 | 2012-07-26 13:10:36 |
  8. |    3 | 2012-07-26 10:20:45 |
  9. +------+---------------------+
  10. 3 rows in set (0.00 sec)

Sin embargo, esto no nos dice la descripción (o cualquier otro campo adicional que tuviera la tabla). Sin embargo, podrías utilizarla como una subconsulta para filtrar tus datos, más o menos así:

Código MySQL:
Ver original
  1. mysql> SELECT T1.*
  2.     -> FROM tabla T1
  3.     -> INNER JOIN
  4.     -> ( SELECT id, MAX(fecha) max_fecha
  5.     ->   FROM tabla GROUP BY id ) T2
  6.     -> ON T1.id = T2.id AND T1.fecha = T2.max_fecha;
  7. +------+-------------+---------------------+
  8. | id   | descripcion | fecha               |
  9. +------+-------------+---------------------+
  10. |    1 | uno         | 2012-07-26 11:57:00 |
  11. |    2 | dos         | 2012-07-26 13:10:36 |
  12. |    3 | trois       | 2012-07-26 10:20:45 |
  13. +------+-------------+---------------------+
  14. 3 rows in set (0.00 sec)

Dale un vistazo para ver si te sirve, sino como te comenté, te invito a que publiques tu pregunta en el foro de PHP para que los expertos en el tema te ayuden.

saludos
Leo.
  #3 (permalink)  
Antiguo 26/07/2012, 14:02
 
Fecha de Ingreso: diciembre-2010
Mensajes: 160
Antigüedad: 13 años, 4 meses
Puntos: 1
Respuesta: Varios forearch a una misma consulta

Cita:
Iniciado por leonardo_josue Ver Mensaje
Hola luciana_uru:

En primer lugar, no es correcto que pongas código PHP ni de ningún otro lenguaje de programación en este foro. Este es exclusivo de MySQL y por políticas del foro no debemos contestar preguntas de programación. Existen los foros propios del lenguaje que estás utilizando.... te invito a que expongas ahí tu pregunta.

En cuanto a tu pregunta, te dejo un ejemplo que igual y te puede servir... supongamos que tenemos esta tabla;

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tabla;
  2. +------+-------------+---------------------+
  3. | id   | descripcion | fecha               |
  4. +------+-------------+---------------------+
  5. |    1 | uno         | 2012-07-26 11:57:00 |
  6. |    1 | one         | 2012-07-26 09:58:23 |
  7. |    1 | un          | 2012-07-26 10:00:51 |
  8. |    2 | dos         | 2012-07-26 13:10:36 |
  9. |    2 | two         | 2012-07-26 07:30:29 |
  10. |    2 | deux        | 2012-07-26 11:16:47 |
  11. |    3 | tres        | 2012-07-26 08:29:21 |
  12. |    3 | three       | 2012-07-26 09:43:22 |
  13. |    3 | trois       | 2012-07-26 10:20:45 |
  14. +------+-------------+---------------------+
  15. 9 rows in set (0.00 sec)

Observa que hay tres registros por cada id, cada uno con una fecha distinta. Si quisiéramos obtener el último registro para cada id podríamos hacer esto:

Código MySQL:
Ver original
  1. mysql> SELECT id, MAX(fecha) max_fecha
  2.     -> FROM tabla GROUP BY id;
  3. +------+---------------------+
  4. | id   | max_fecha           |
  5. +------+---------------------+
  6. |    1 | 2012-07-26 11:57:00 |
  7. |    2 | 2012-07-26 13:10:36 |
  8. |    3 | 2012-07-26 10:20:45 |
  9. +------+---------------------+
  10. 3 rows in set (0.00 sec)

Sin embargo, esto no nos dice la descripción (o cualquier otro campo adicional que tuviera la tabla). Sin embargo, podrías utilizarla como una subconsulta para filtrar tus datos, más o menos así:

Código MySQL:
Ver original
  1. mysql> SELECT T1.*
  2.     -> FROM tabla T1
  3.     -> INNER JOIN
  4.     -> ( SELECT id, MAX(fecha) max_fecha
  5.     ->   FROM tabla GROUP BY id ) T2
  6.     -> ON T1.id = T2.id AND T1.fecha = T2.max_fecha;
  7. +------+-------------+---------------------+
  8. | id   | descripcion | fecha               |
  9. +------+-------------+---------------------+
  10. |    1 | uno         | 2012-07-26 11:57:00 |
  11. |    2 | dos         | 2012-07-26 13:10:36 |
  12. |    3 | trois       | 2012-07-26 10:20:45 |
  13. +------+-------------+---------------------+
  14. 3 rows in set (0.00 sec)

Dale un vistazo para ver si te sirve, sino como te comenté, te invito a que publiques tu pregunta en el foro de PHP para que los expertos en el tema te ayuden.

saludos
Leo.
Muchas Gracias! si me sirve. Antes lo habia publicado en PHP, pero me dijieron que mejor lo postee en Mysql . Tu ejemplo me sirvio mucho!!! Muchas Gracias! vere que tal y te cuento.
  #4 (permalink)  
Antiguo 26/07/2012, 14:36
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Varios forearch a una misma consulta

Hola de nuevo:

Hay que saber diferenciar... El tema (y la respuesta) corresponde a SQL (observa que no incluí ningún código de programación), pero lo que está mal es incluir todo el código PHP que pusiste... eso es lo que está mal.

Toma en cuenta que hay muchas personas que aunque trabajan con MySQL no tienen conocimientos en PHP (lo mismo sucede con JAVA, .NET o cualquier otro lenguaje)... Es por eso que se les pide a los foristas que tengan cuidado con eso (en especial a los programadores PHP, pues por alguna extraña razón suelen asociarlo como si fuera MySQL).

En fin, me da gusto que el código te haya servido y espero que tomes en cuenta lo que te comento para la siguiente vez que nos visites en el foro.

Saludos
Leo.

Etiquetas: registros, select, sql
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 12:12.