Foros del Web » Programando para Internet » PHP »

Mostrar registros desde BD por Categorías

Estas en el tema de Mostrar registros desde BD por Categorías en el foro de PHP en Foros del Web. Buenos días gente del foro. Paso a comentarles mi problema ante el siguiente código: Código PHP: // traemos listado de categorias $arrCategorias  = array(); $query  =  "SELECT idCategoria, valor FROM `categorias` ORDER BY valor ASC" ; $resultado  =  ...
  #1 (permalink)  
Antiguo 02/05/2011, 16:05
 
Fecha de Ingreso: mayo-2011
Mensajes: 17
Antigüedad: 13 años
Puntos: 2
Pregunta Mostrar registros desde BD por Categorías

Buenos días gente del foro. Paso a comentarles mi problema ante el siguiente código:


Código PHP:
// traemos listado de categorias
$arrCategorias = array();
$query "SELECT idCategoria, valor FROM `categorias` ORDER BY valor ASC";
$resultado mysql_query ($query$dbConn);
while ( 
$row mysql_fetch_assoc ($resultado)) {
    
array_push$arrCategorias,$row );
}

// traemos listado de items
$arrItems = array();
$query "SELECT * FROM `items` GROUP BY idCategoria";
$resultado mysql_query ($query$dbConn);
while ( 
$row mysql_fetch_assoc ($resultado)) {
    
array_push$arrItems,$row );

Código HTML:
<div id="content">
  <div id="wrapper">
    <div id="steps">
      <!-- Aquí los items -->
      <!-- Este es el bucle 1: -->
      <? foreach ($arrCategorias as $categoria) { ?>           
         <fieldset class="step">
      <!-- Este es el bucle 2: -->
            <? foreach ($arrItems as $items) { ?>
            <? echo $items['cuerpo']; ?>
            <? } ?> 
          </fieldset>
       <? } ?>
    </div>
    <div id="navigation">
      <ul>
        <!-- Este es el bucle 3: -->
        <? foreach ($arrCategorias as $categoria) { ?>           
        <li><a href="#"><? echo $categoria['valor']; ?></a></li>  
        <? } ?>
      </ul> 
    </div>
  </div>
</div> 
Paso a explicar el codigo:

El bucle nº 1 genera un array con las categorias existentes, con cada categoría dentro de <fieldset class="step"></fieldset>.
El bucle nº 2 genera un segundo array (dentro del nº 1) donde debieran mostrarse los items agrupados por categoría. El problema es que me muestra todos los items, de todas las categorías.
El bucle nº3 es igual al nº 1 y simplemente genera un menu de navegacion acorde con las categorías del bucle nº 1.

Intente primero modificar la consulta SQL, pero creo que es mas bien un problema del/los arrays, para conseguir que me muestre los items agrupados por categoría, dentro del array que genera las mismas. Alguien tiene alguna idea? Intente aplicar varias soluciones de los FAQs y no lo consigo.
  #2 (permalink)  
Antiguo 02/05/2011, 16:13
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años
Puntos: 344
Respuesta: Mostrar registros desde BD por Categorías

El problema es la 2ª consulta SQL que realizas.

Cuando le dices group by no es que te devuelve la tabla ordenada por el idCategoria, sino que te intenta agrupar todas las filas que tienen la misma categoría, es decir, con un ejemplo:


idCategoria iditem

1 1
1 2
2 3
2 4
3 5
3 6

Con el group by quedarían:


idCategoria
1
2
3

Tu lo que necesita es utilizar ORDER BY idCategoria


Quedaría así:

Código PHP:
Ver original
  1. // traemos listado de categorias
  2. $arrCategorias = array();
  3. $query = "SELECT idCategoria, valor FROM `categorias` ORDER BY valor ASC";
  4. $resultado = mysql_query ($query, $dbConn);
  5. while ( $row = mysql_fetch_assoc ($resultado)) {
  6.     array_push( $arrCategorias,$row );
  7. }
  8.  
  9. // traemos listado de items
  10. $arrItems = array();
  11. $query = "SELECT * FROM `items` ORDER BY idCategoria ASC";
  12. $resultado = mysql_query ($query, $dbConn);
  13. while ( $row = mysql_fetch_assoc ($resultado)) {
  14.     array_push( $arrItems,$row );
  15. }


Aun así no funcionaría bien porque lo que tendrías es un array con todos los items.

Hay varias formas de solucionarlo, la más sencilla pero más costosa en rendimiento es hacer una consulta por cada categoría
y la más complicada pero quizás más rápida es hacer lo de arriba pero controlando cuando llegas al final de cada categoría en el array.


Espero que te haya quedado algo claro.

1. O

Última edición por alexg88; 02/05/2011 a las 16:19
  #3 (permalink)  
Antiguo 02/05/2011, 16:24
 
Fecha de Ingreso: mayo-2011
Mensajes: 17
Antigüedad: 13 años
Puntos: 2
Respuesta: Mostrar registros desde BD por Categorías

Cita:
Iniciado por alexg88 Ver Mensaje

Tu lo que necesita es utilizar ORDER BY idCategoria
Acabo de intentarlo, y el array me sigue mostrando todos los items, de todas las categorías.
No se si el problema esta en la consulta SQL, sino en el array donde muestro los resultados.
Creo que la solución seria que el array me agrupe los items cuya "idCategoria" sea la misma. De todas maneras sigo sin lograr solucionarlo, así que sigo leyendo sus comentarios... gracias.
  #4 (permalink)  
Antiguo 02/05/2011, 16:26
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años
Puntos: 344
Respuesta: Mostrar registros desde BD por Categorías

He editado el mensaje pero no has debido de verlo, hay explico porque pasa eso.
  #5 (permalink)  
Antiguo 02/05/2011, 17:30
 
Fecha de Ingreso: mayo-2011
Mensajes: 17
Antigüedad: 13 años
Puntos: 2
Respuesta: Mostrar registros desde BD por Categorías

Intento y la verdad es que no me sale.
Probé con la función GROUP_CONCAT de MySQL, que no conocía y tampoco lo logre. Agradecería si fueran mas participativos con los comentarios...

Última edición por chueke; 03/05/2011 a las 08:26

Etiquetas: bd, registros
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 08:25.