Foros del Web » Programando para Internet » PHP »

listado de productos e imágenes (consulta correcta)

Estas en el tema de listado de productos e imágenes (consulta correcta) en el foro de PHP en Foros del Web. Hola, estoy armando un listado medio largo de productos y sus respectivas imagenes con php y mysql La forma en que armo el listado es: ...
  #1 (permalink)  
Antiguo 05/01/2012, 15:06
 
Fecha de Ingreso: enero-2012
Mensajes: 6
Antigüedad: 12 años, 3 meses
Puntos: 0
Pregunta listado de productos e imágenes (consulta correcta)

Hola, estoy armando un listado medio largo de productos y sus respectivas imagenes con php y mysql

La forma en que armo el listado es:

Tengo la tabla "productos"

ID | NOMBRE | DESCRIPCIÓN

y la tabla "imágenes"

ID | ID_PRODUCTO | NOMBRE | URL

Hago un FOR que van listando a todos los productos y dentro de cada producto (obtengo el ID de producto) y genero una nueva consulta (a la tabla de "imágenes") y genero otro FOR para las imágenes del mismo.

Leyendo en internet, encuentro que hacer esta doble consulta a la base de datos puede sobrecargar un poco el server y para evitar esto y (también para aprender a hacerlo mejor) quería consultar cual sería la mejor forma de resolver esto y cómo se hace la consulta SQL que debería realizar

De antemano muchisimas gracias

Saludos
  #2 (permalink)  
Antiguo 05/01/2012, 15:17
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: listado de productos e imágenes (consulta correcta)

Podrias probar con una sola tabla

productos

ID | NOMBRE | DESCRIPCION | IMAGEN | URL

tampoco veo que sean muchos campos
  #3 (permalink)  
Antiguo 05/01/2012, 15:26
Avatar de memoadian
Colaborador
 
Fecha de Ingreso: junio-2009
Ubicación: <?php echo 'México'?>
Mensajes: 3.696
Antigüedad: 14 años, 10 meses
Puntos: 641
Respuesta: listado de productos e imágenes (consulta correcta)

esta bien que tenga dos tablas ya que un producto puede tener dos o más imagenes.

la solucion es un join

Código MySQL:
Ver original
  1. SELECT id,nombre, imagen, etc. FROM tabla_productos AS p JOIN tabla_imagenes AS i ON p.id_producto = p.id WHERE id = 12

eso es mejor y menos tardado, pero tendrás que manejar una asociacion entre las dos tablas en este caso cada imagen tiene el id del producto al que pertenece.
  #4 (permalink)  
Antiguo 05/01/2012, 15:31
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: listado de productos e imágenes (consulta correcta)

si , si va a tener mas de una imagen entonces si es mejor 2 tablas
  #5 (permalink)  
Antiguo 05/01/2012, 15:41
 
Fecha de Ingreso: enero-2012
Mensajes: 6
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: listado de productos e imágenes (consulta correcta)

Hola gracias a los dos

En realidad siempre lo hago como dice webankenovi pero me limito a una sola imagen por producto (o segun la cantidad de campos "url" que agregue a esa tabla)

y justamente ahora quería evitar poner un límite de imágenes

yendo al ejemplo de memoadian (perdon soy principiante en php y programación) de esa forma no estaría haciendo nuevamente dos consultas simultaneas? porque primero necesitaría hacer el FOR para saber cual es el id del producto (WHERE id = 12)

mi primer consulta es:

SELECT * FROM productos WHERE activo = 1

y cuando esta recorriendo el for, mi segunda consulta es

SELECT * FROM imagenes WHERE id_producto = 12 and activo = 1

Se puede hacer de otra forma?

Desde ya muchas gracias
  #6 (permalink)  
Antiguo 05/01/2012, 15:43
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: listado de productos e imágenes (consulta correcta)

si solo vas a usar una imagen usa una tabla y no te compliques la verdad , para que hacer 2 consultas si con una consigues lo mismo y si son mas imagenes esa seria la manera como te dijieron o como vos lo haces
  #7 (permalink)  
Antiguo 05/01/2012, 15:48
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: listado de productos e imágenes (consulta correcta)

SELECT * FROM productos WHERE activo = '$id'


SELECT * FROM imagenes WHERE id_producto = '$id'

ya q el id es el mismo el de productos que el de imagenes id_producto
  #8 (permalink)  
Antiguo 05/01/2012, 15:57
 
Fecha de Ingreso: enero-2012
Mensajes: 6
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: listado de productos e imágenes (consulta correcta)

por las dudas, el campo "Activo" se refiere a que el producto se muestre o no en el listado del sitio que ve el usuario.

Claro, la relación esta dada por "id" del producto y "id_producto" en la tabla "imágenes", porque no quieren que se estipule un limite de fotos

y no llego a entender en la forma que dice memoadian como obtengo el WHERE id = 12

espero se entienda, sino decime y lo explico de otra manera

muchas gracias
  #9 (permalink)  
Antiguo 05/01/2012, 15:59
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: listado de productos e imágenes (consulta correcta)

lo del 12 supongo que seria un ejemplo na mas
  #10 (permalink)  
Antiguo 05/01/2012, 16:07
 
Fecha de Ingreso: enero-2012
Mensajes: 6
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: listado de productos e imágenes (consulta correcta)

Si, el valor 12 es un ejemplo

pero me refiero, es necesaria poner esa parte en la consulta? porque es un valor que en el momento en que se ejecuta la consulta no tengo

lo que quiero es obtener un listado como el siguiente: ¿se puede lograr en una sola consulta?

id - nombre - descripcion - imagen1 - imagen2 - imagen3 - imagen xx (y la cant de imagenes que se hayan guardado para ese producto)
id - nombre - descripcion - imagen1 - imagen2 - imagen3 - imagen xx
id - nombre - descripcion - imagen1 - imagen2
id - nombre - descripcion - imagen1
id - nombre - descripcion - imagen1 - imagen2 - imagen3 - imagen xx
id - nombre - descripcion - imagen1 - imagen2 - imagen3 - imagen xx
id - nombre - descripcion - imagen1 - imagen2 - imagen3 - imagen xx

o sea, en la misma consulta (1 solo FOR) ya me vendrían los datos de todos los productos y sus respectivas imagenes asociadas

se puede hacer esto?
  #11 (permalink)  
Antiguo 05/01/2012, 16:11
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: listado de productos e imágenes (consulta correcta)

pruebalo es la mejor forma de saberlo jeje
  #12 (permalink)  
Antiguo 05/01/2012, 22:18
Avatar de memoadian
Colaborador
 
Fecha de Ingreso: junio-2009
Ubicación: <?php echo 'México'?>
Mensajes: 3.696
Antigüedad: 14 años, 10 meses
Puntos: 641
Respuesta: listado de productos e imágenes (consulta correcta)

solo necesitas una consulta, que una la tabla del producto con sus imagenes, eso es lo que hace la consulta que te dí.

y lo que hace es traerte esto:

id - nombre - descripcion - imagen1
id - nombre - descripcion - imagen2
id - nombre - descripcion - imagen3
id - nombre - descripcion - imagen4

generalmente cuando uno usa esta consulta se ve una página con el nombre del producto y todas las imagenes asociadas a este, pero se podria hacer un while con esta consulta que traiga todos los productos con todas las imagenes.

y con el join evitas hacer dos consultas, solo es una.

sería bueno que pusieras algo de código, por que me cuesta trabajo entender lo que haces.
  #13 (permalink)  
Antiguo 06/01/2012, 12:43
 
Fecha de Ingreso: enero-2012
Mensajes: 6
Antigüedad: 12 años, 3 meses
Puntos: 0
Pregunta Respuesta: listado de productos e imágenes (consulta correcta)

Bueno, tal como decis, voy a poner el código que uso porque lo quiero modificar pero no me está saliendo lo que quiero hacer, porque no sé como traer (en la clase) ni mostrar a las imágenes en el div galeria que está (en listado.php)

CLASE PRODUCTOS

Código HTML:
function getAll($coneccion){
	$sqlString = "SELECT * FROM productos AS p JOIN imagenes AS i ON i.id_producto = p.id";
	$coneccion->makeQuery($sqlString);
	
	if ($coneccion->getRowsCount()>0)/*Si es mayor a cero, creo un arreglo con el total de filas*/
		$result = array($coneccion->getRowsCount());
	else
		$result = null;
	$i=0;
	while ($row = $coneccion->nextRow()) {
			$result[$i] = new Producto();
			$result[$i]->setId($row["id"]);
			$result[$i]->setNombre($row["nombre"]);
			$result[$i]->setDescripcion($row["descripcion"]);
		$i++;
	}
	return $result;
}

PAGINA LISTADO.PHP

Código HTML:
$producto = classProductosManager::getAll(new DbConnection());

<div class="listado">
	<? for($i=0;$i<count($producto);$i++){ ?>
	<div class="producto">
		<p><?=$producto[$i]->getNombre()?></p>
		<p><?=$producto[$i]->getDescripcion()?></p>
			<div class="galeria">
				<div>imagen 1</div>
				<div>imagen 2</div>
				<div>imagen xx</div>
			</div>
	</div>
</div>
<? } ?> 
Bueno, desde ya muchas gracias
  #14 (permalink)  
Antiguo 09/01/2012, 11:53
 
Fecha de Ingreso: enero-2012
Mensajes: 6
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: listado de productos e imágenes (consulta correcta)

Hola, seguí intentando y haciendo varias pruebas, pensé que con tener la consulta SQL me iva a alcanzar pero también tengo que adaptar el código php y no lo puedo lograr

Llego hasta hacer el listado de productos pero en cada producto no puedo mostrar las imágenes que le corresponden

Vuelvo a copiar el código de la clase productos

Código PHP:
    $sqlString "SELECT * FROM productos AS p JOIN imagenes AS i ON i.id_producto = p.id";
    
$coneccion->makeQuery($sqlString);
    
    if (
$coneccion->getRowsCount()>0)/*Si es mayor a cero, creo un arreglo con el total de filas*/
        
$result = array($coneccion->getRowsCount());
    else
        
$result null;
    
$i=0;
    while (
$row $coneccion->nextRow()) {
            
$result[$i] = new Producto();
            
$result[$i]->setId($row["id"]);
            
$result[$i]->setNombre($row["nombre"]);
            
$result[$i]->setDescripcion($row["descripcion"]);
        
$i++;
    }
    return 
$result;



PAGINA LISTADO.PHP

Código PHP:
$producto = classProductosManager::getAll(new DbConnection());

<div class="listado">
    <? for($i=0;$i<count($producto);$i++){ ?>
    <div class="producto">
        <p><?=$producto[$i]->getNombre()?></p>
        <p><?=$producto[$i]->getDescripcion()?></p>
            <div class="galeria">
                <div>imagen 1</div>
                <div>imagen 2</div>
                <div>imagen xx</div>
            </div>
    </div>
</div>
<? ?>

Si me pueden volver a orientar, desde ya se los agradezco

Muchas gracias

Saludos

Etiquetas: 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 04:17.