Ver Mensaje Individual
  #23 (permalink)  
Antiguo 28/01/2014, 10:37
Avatar de Alexis88
Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Ordenar por categorias dependientes.

Analizando con más calma tu problema, el inconveniente se te presenta porque estás intentando mostrar todas las imágenes relacionadas a una categoría, pero con una consulta inadecuada, puesto que de ese modo, siempre mostrarás una y solamente una imagen por cada categoría.

Lo que debes hacer es agrupar a todos los nombres e imágenes asociadas a cada categorías y cuando imprimas los datos de la categoría, también imprimes a todos los nombres e imágenes que estén asociadas a dicha categoría, así con cada una.

Código PHP:
Ver original
  1. <?php
  2. $query = mysql_query("SELECT C.*, GROUP_CONCAT(P.nombre) AS name, GROUP_CONCAT(P.imagen) AS img FROM categorias C INNER JOIN productos P ON C.categoria_id = P.categoria_padre GROUP BY C.categoria_id ORDER BY C.categoria_nombre ASC, P.nombre ASC");
  3. if (mysql_num_rows($query)){
  4.     $catactual = NULL;
  5.     while ($row = mysql_fetch_array($query)){
  6.         if ($catactual != $row["categoria_id"]){
  7.             $catactual = $row["categoria_id"];
  8. ?>
  9.             <div class = "recent-projects">
  10.                 <h4 class="title">
  11.                     <span>
  12.                         <?=$row["categoria_nombre"]?>
  13.                     </span>
  14.                 </h4>
  15.                 <div class = "projects-carousel touch-carousel">
  16. <?php
  17.                     $nombres = explode(",", $row["name"]);
  18.                     $imagenes = explode(",", $row["img"]);
  19.                     for ($i = 0, $limite = count($nombres); $i < $limite; $i++){
  20. ?>             
  21.                         <div class = "portfolio-item item">
  22.                             <div class = "portfolio-border">
  23.                                 <div class = "portfolio-thumb">
  24.                                     <a class = "lightbox" data-lightbox-type = "ajax" href = "https://vimeo.com/78468485">
  25.                                         <div class="thumb-overlay">
  26.                                             <i class="icon-video-1"></i>
  27.                     </div>
  28.                                         <img src="images/<?php echo $imagenes[$i]; ?>" />
  29.                                     </a>
  30.                                 </div>
  31.                                 <div class="portfolio-details">
  32.                                     <a href="#">
  33.                                         <h4><?=$nombres[$i]?></h4>
  34.                                     </a>
  35.                                 </div>
  36.                             </div>
  37.                         </div>
  38. <?php
  39.                     }
  40. ?>                  
  41.                 </div>
  42.             </div>
  43. <?php
  44.         }
  45.     }
  46. }
  47. ?>

En esencia, con GROUP_CONCAT, agrupo a todos los nombres e imágenes que estén relacionadas a cada categoría, por ejemplo, categoría 1 tiene los nombres A1, A2 y A3 y las imágenes A1.jpg, A2.jpg, A3.jpg, de este modo, dichos nombres e imágenes son agrupados junto a ese registro y cuando imprimo la información, quito las comas con las que esta función de MySQL agrupa a los datos, convirtiéndose dicho grupo en un array y dado a que debe existir la misma cantidad de nombres como de imágenes, recorro con un bucle al array de los nombres y en cada iteración, muestro la imagen y nombre respectivo estando aún dentro del Div principal de la categoría en curso. Así será con cada categoría.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand