2011-11-18 6 views
5

¿Puedo LIMITAR 1 para una columna específica pero no para el resto? Tengo dos mesas. Uno con información y otro con imágenes. Para tantas imágenes hay, se ejecutan muchas consultas de información. Entonces, serán 5 imágenes y 5 del mismo título. ¿Cómo puedo LIMITAR 1 título y LIMITAR 3 imágenes?SELECCIONAR consulta, LÍMITE 1 para una columna, pero no el resto

$query = mysql_query(" 
        SELECT `$category`.title AS title, 
        page_images.image_loc AS images 
        FROM `$category`, page_images 
        WHERE `$category`.title = page_images.title 
        "); 

      while($fetch = mysql_fetch_assoc($query)) { 

       $title = $fetch['title'];    
       $images = $fetch['images']; 

       echo '<b>'.$title.'</b><br />'; 
       echo '<a href="http://localhost/'.$images.'"> 
         <img src="http://localhost/'.$images.'" height="80" width="80" /> 
         </a>'; 

       } 
+0

¿Puede usted explicar con más detalle, su confuso. – Zohaib

Respuesta

5

puede agrupar por título y recopilar ubicaciones de imágenes con GROUP_CONCAT. y luego puede explotar las ubicaciones recopiladas en una matriz. e imprime todas las imágenes.

aquí lo que quiero decir

$query = mysql_query(" 
SELECT 
    title AS title 
    ,GROUP_CONCAT(i.image_loc) AS images 
FROM 
    `$category` c 
    JOIN page_images i USING(title) 
GROUP BY 
    title 
"); 

while($fetch = mysql_fetch_assoc($query)) { 
    $title = $fetch[ 'title' ];    
    $images = explode(',', $fetch[ 'images' ]); 

    echo '<b>' . $title . '</b><br />'; 
    foreach($images as $image) { 
     echo '<a href="http://localhost/'.$image.'"> 
      <img src="http://localhost/'.$image.'" height="80" width="80" /> 
     </a>'; 
    } 
} 
+0

¡Eso es increíble! ¿Puedo controlar las imágenes numéricas? Emite todas las imágenes guardadas que coinciden con la información. – Graham

+0

Modifiqué una ruptura en la declaración de foreach para limitar las imágenes. – Graham

+2

sí, puede limitar las imágenes. hay dos formas de archivar esto. Primero, en php puedes usar for en lugar de foreach. De forma alternativa, en sql, como solución alternativa, puede limitar la recopilación utilizando la función SUBSTRING_INDEX, de la siguiente manera: SUBSTRING_INDEX (GROUP_CONCAT (i.image_loc), ',', 10) lo que significa obtener la cadena desde el principio hasta la 10ma coma. – ncank

1

¿Trabajaría aquí con un grupo?

SELECT `$category`.title AS title, 
    page_images.image_loc AS images 
FROM `$category`, page_images 
WHERE `$category`.title = page_images.title 
GROUP BY title, images 
LIMIT 3 
+0

Eso limita 3 imágenes de la misma página. También duplica el título de cada uno. GROUP BY '$ category'.title LIMIT funciona, pero solo genera una imagen. Estoy tratando de obtener ese efecto, pero con 3 o más imágenes. – Graham

+0

Creo que en este caso, tiene sentido ejecutar para crear una rutina almacenada ... y usar la consulta múltiple de mysqli. Además, ¿qué tan grande es tu resultado? – ansiart

+0

Cualquiera desde 3 hasta 20 imágenes. No he investigado esos. Sin embargo miro eso. – Graham

Cuestiones relacionadas