Foros del Web » Programando para Internet » ASP Clásico »

Galeria de productos con info + foto

Estas en el tema de Galeria de productos con info + foto en el foro de ASP Clásico en Foros del Web. Hola buenos días. Tengo un problema a la hora de hacer un buscador de productos. Para empezar os muestro como tengo estructurada la base de ...
  #1 (permalink)  
Antiguo 10/11/2005, 07:42
 
Fecha de Ingreso: enero-2004
Mensajes: 21
Antigüedad: 21 años, 3 meses
Puntos: 0
Galeria de productos con info + foto

Hola buenos días.

Tengo un problema a la hora de hacer un buscador de productos.

Para empezar os muestro como tengo estructurada la base de datos:

tabla info: Donde tengo toda la información del producto.
tabla fotos: Donde guardo varias fotos de cada producto.

Las dos tablas están relacionadas por un ID.

Quiero hacer una consulta a la base de datos i mostrar cada uno de los productos con su información i una de las fotos.
Pero no se como hacerlo.

Espero que alguien me pueda echar una mano.

Muchas gracias.
  #2 (permalink)  
Antiguo 10/11/2005, 10:13
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 23 años, 3 meses
Puntos: 98
I puedes poner la estructura de las tablas?

Select a.campo1, a.campo2, a.campon, b.campo1, b.campon FROM tabla1 a INNER JOIN tabla2 b ON a.campoid = b.campoid [WHERE condiciones]
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #3 (permalink)  
Antiguo 10/11/2005, 16:55
 
Fecha de Ingreso: noviembre-2005
Mensajes: 658
Antigüedad: 19 años, 5 meses
Puntos: 3
Cuando se trabaja con muchas fotos no es bueno almacenarlas en la base de datos ya que la performance del sistema se vera afectada, debido a que el proceso de extraer se va haciendo por bloques de bytes y esto por cada una va tomando su tiempo... aconsejo cambiar y dejar en el servidor un directorio de fotos en donde en la base se guarde solo el path hacia ellas......
  #4 (permalink)  
Antiguo 16/11/2005, 07:30
 
Fecha de Ingreso: enero-2004
Mensajes: 21
Antigüedad: 21 años, 3 meses
Puntos: 0
Galeria de productos con info + foto

He intentado utilizar esta select que.

SELECT info.id.reg, fotos.nomFoto
FROM info a INNER JOIN fotos b ON info.idreg = fotos.idreg


Pero el Dreamweaver me indica "ERROR DE SINTAXIS EN LA OPERACIÓN JOIN".


La estructura de las tablas es la siguiente:

tabla info: idreg, texto
tabla fotos: idreg, nombreFoto

El campo que esta relacionado en las dos tablas es el idreg.
Y para contestar el comentario de "monkyta", en la tabla fotos solo guardo el nombre de la imagen.

Gracias por la ayuda y espero que me puedan ayudar
  #5 (permalink)  
Antiguo 16/11/2005, 09:01
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 23 años, 3 meses
Puntos: 98
Trata algo asi:

SELECT a.idreg, a.texto, b.nombreFoto FROM info a INNER JOIN fotos b ON b.idreg = a.idreg [WHERE condiciones]
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #6 (permalink)  
Antiguo 17/11/2005, 08:20
 
Fecha de Ingreso: enero-2004
Mensajes: 21
Antigüedad: 21 años, 3 meses
Puntos: 0
Galeria de productos con info + foto

He probado la consulta que me has indicado u_goldman.

SELECT info.idreg, fotos.nomFoto
FROM info INNER JOIN fotos ON info.idreg = fotos.idreg
ORDER by info.idreg


Y el resultado que me da es el siguiente:

idreg / nomFoto

1 / 0001_0002.jpg
1 / 0001_0001.jpg
2 / 0002_0001.jpg
3 / 0003_0001.jpg

El problema que tengo es por la galería 1. Ya que tiene dos fotos.
Entonces no se como puedo hacer para que solo me muestre la primera imagen (imagen numero 0001_0001.jpg)
  #7 (permalink)  
Antiguo 17/11/2005, 08:46
 
Fecha de Ingreso: noviembre-2005
Mensajes: 18
Antigüedad: 19 años, 5 meses
Puntos: 0
El problema que puedes tener con lo anterior es que al usar la palabra INNER puede que no obtengas resultados, por ejemplo en el caso de que no exista una foto par un producto. En cualquier caso entiendo que es mejor usar RIGHT o LEFT, dejándola caer sobre la tabla productos para asegurarte d que muestra todos los productos y además las fotos de cada producto.

Para que solo te muestre la primera imagen, en el caso de que uses MySQL bajo windows o una base de datos potente, lo tienes fácil, agrupando por ejemplo por IdProducto al final de la SQL (group by IdProducto). En ocasiones en access esta sentencia falla.
  #8 (permalink)  
Antiguo 17/11/2005, 09:40
Avatar de JuanRAPerez
Colaborador
 
Fecha de Ingreso: octubre-2003
Mensajes: 2.393
Antigüedad: 21 años, 6 meses
Puntos: 27
una de las cosas que podrias hacer y quizas te ayude a resolver este lio e incluso evitarias hacer el iner joine es que seleccoinaes una imagen para amarrarla en tu tabla principal

tabla info: idreg, texto, fotoprincipal

y asi evitas hacer el recorrido con un iner join a otra tabla lo cual podria demorar la carga de la pagina.

digo....
__________________
JuanRa Pérez
San Salvador, El Salvador
  #9 (permalink)  
Antiguo 17/11/2005, 09:49
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 23 años, 3 meses
Puntos: 98
Bueno, los distintos metodos de union se utilizan para cosas diferentes, en realidad personalmente no aconsejo utilizar los modificadores left y right, salvo en los casos que sean inminenetemente necesarios, pues son suceptibles de devolver valores nulos que ralentizan tu sistema, ademas que realmente si devuelven este tipo de valores es que las tablas no se han unido, lo cual puede resultar en consultas inconsistentes si no se tiene cuidado con ellos.

Con respecto a la duda de Kubid, utiliza un SELECT DISTINCT, y te aconsejo ademas de que te leas un buen tutorial de SQL.

http://www.asptutor.com/sql/


Salu2,
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #10 (permalink)  
Antiguo 17/11/2005, 11:47
 
Fecha de Ingreso: noviembre-2005
Mensajes: 18
Antigüedad: 19 años, 5 meses
Puntos: 0
Estoy de acuerdo en lo que dices U_G, el problema es que en mi opinión depende mucho de la base de datos que se esté utilizando y de el enfoque.
Usar DISTINCT, para mí, es solucionar un mal problema de estructura de la SQL, de la estructura de tablas o ambas cosas. No se debería llegar a este tipo de situaciones. Si por otro lado no recuerdo mal, DISTINCT no puede ser usado con eficacia en MySQL, aunque se puede usar group by.

Creo que en resumen depende de si se quieren mostrar todos los productos, y las fotos asociadas, o solo todos los productos con foto.
salu2!
  #11 (permalink)  
Antiguo 17/11/2005, 11:52
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 23 años, 3 meses
Puntos: 98
Cita:
Usar DISTINCT, para mí, es solucionar un mal problema de estructura de la SQL, de la estructura de tablas o ambas cosas. No se debería llegar a este tipo de situaciones.
Es correcto, aunque sucede lo mismo a veces tal vez no sea problema de estructura, simplemente asi debe ser, pero es cierto, en la mayoria de los casos se deberia evitar.

Salu2,
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #12 (permalink)  
Antiguo 17/11/2005, 12:46
 
Fecha de Ingreso: enero-2004
Mensajes: 21
Antigüedad: 21 años, 3 meses
Puntos: 0
Galeria de productos con info + foto

Respecto a lo que me comentas "Neoland". En el caso de que no exista una foto, ya lo tengo controlado.

Respecto a lo de usar Group by. Utilizo Bases de datos ACCESS.

Lo he probado con la siguiente sentencia:

SELECT info.idreg, fotos.nomFoto
FROM info INNER JOIN fotos ON info.idreg = fotos.idreg
GROUP BY info.idreg


Pero no ha funcionado. En el Dreamweaver me indicaba el siguiente mensaje:
"Ha intentado ejecutar una consulta que no incluye la expresión especificada 'nomFoto' como parte de una función de agregado"


La solución que comenta "JuanRAPerez" ya me la habia comentado un amigo mio.
Pero me gustaria poder prescindir de añadir ese campo de la tabla info.


Respecto a lo que comentaba "u_goldman" ya habia utilizado la función Distinct antes. Aunque no lo puse en el foro. La utilize en esta select:

SELECT distinct info.idreg, fotos.nomFoto
FROM info INNER JOIN fotos ON info.idreg = fotos.idreg
ORDER BY info.idreg


pero me sige pasando lo mismo. Me muestra repetidos los que tienen mas de 1 imagen.

Vaya. Lo siento mucho por ser tan pesado. :)
  #13 (permalink)  
Antiguo 17/11/2005, 13:00
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 23 años, 3 meses
Puntos: 98
Si, el group by deberia entonces resolverte el problema, pero investiga a fondo sobre las caracteristicas de este, en el link que te pase lo encuentras.

Salu2,
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
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 15:37.