Foros del Web » Programando para Internet » PHP »

una única consulta para distintas tablas

Estas en el tema de una única consulta para distintas tablas en el foro de PHP en Foros del Web. hola a todos/as: tengo un problema. tengo una base de datos con tres tablas: tabla categorias: -- recoge las categorías idcategoria------autonumerico nombre----------nombre de la categoria ...
  #1 (permalink)  
Antiguo 26/08/2008, 09:51
Avatar de estibaliz2006  
Fecha de Ingreso: noviembre-2006
Mensajes: 439
Antigüedad: 17 años, 5 meses
Puntos: 1
una única consulta para distintas tablas

hola a todos/as: tengo un problema. tengo una base de datos con tres tablas:

tabla categorias: -- recoge las categorías
idcategoria------autonumerico
nombre----------nombre de la categoria

tabla productos: -- recoge los productos
idproducto-------autonumerico
producto---------nombre del producto
categoriaid------categoria a la que pertenece

tabla imagenes: -- recoge las imagenes asociadas a cada producto
idimagen--------autonumerico
imagen----------ruta de la imagen (las imagenes se archivan en un directorio llamado imagenes)
productoid------producto al que está asociado la imagen

como comprenderéis, el idcategoria = categoriaid y el idproducto = productoid

bien. yo lo que quiero es extraer un producto de la base de datos y que me diga sus datos, la categoria a la que pertenece y las imagenes asociadas a él.

esto lo hago a través de INNER JOIN y funciona. pero funciona sólamente cuando hay una única imagen asociada al producto. porque cuando hay más imágenes asociadas al producto me saca un nuevo registro para cada imagen repitiendo el resto de datos del producto.

una consulta tipo sería esta:
Código PHP:
function consulta()
    {
     
      
$sql "SELECT * FROM productos INNER JOIN categorias ON productos.categoriaid = categorias.idcategoria INNER JOIN imagenes ON productos.idproducto = imagenes.productoid ORDER BY idproducto DESC";
     
$result mysql_query($sql) or die (mysql_error());
     return 
$result;  
    }

$result consulta ();
$p mysql_num_rows($result);    
while(
$p mysql_fetch_array($result)) 
    {
echo 
"Nombre del Producto: $p[producto]";
echo 
"Categoria del Producto: $p[categoria]";
echo 
"Imagenes del Producto: $p[imagen]";


pues como os digo si hay una única imagen, no hay problema, saca esos datos, pero en el momento que hay más imagenes saca todos los datos por cada imagen asociada: supongamos un producto:

Nombre: BOLIGRAFO
Categoria: PAPELERIA
Imagenes asociadas: Imagen 1 e Imagen 2

pues la base de datos me devuelve

Nombre del Producto: BOLIGRAFO
Categoría del Producto: PAPELERIA
Imagenes del Producto: IMAGEN 1

Nombre del Producto: BOLIGRAFO
Categoría del Producto: PAPELERIA
Imagenes del Producto: IMAGEN 2

¿cómo hago para que las dos imágenes me salgan en un solo registro y no con datos repetidos como ahora?

como sería la consulta? que puedo estar haciendo mal? gracias por vuestra ayuda

Última edición por estibaliz2006; 26/08/2008 a las 10:06
  #2 (permalink)  
Antiguo 26/08/2008, 10:00
Avatar de chwc  
Fecha de Ingreso: julio-2008
Ubicación: Buenos Aires ! :D
Mensajes: 814
Antigüedad: 15 años, 9 meses
Puntos: 103
Respuesta: una única consulta para distintas tablas

una cosa, seria mucho mejor que esten todos los datos en una misma tabla, por que si no es muy complicado.(te recomiendo que hagas una tabla asi).
campos:
1. idproducto
2. categoria
3. nombre
4. descripcion
5. enlazados

si estas conforme con mi idea te mando el codigo.
el url de la imagen no lo nescesitas, ya que puedes poner:
Código PHP:
// supongamos que $idproducto = 32
<img src="imagenes/<?echo $idproducto;?>.gif" >
esto te dara un url a la imagen asi: imagenes/32.gif

saludos :)
  #3 (permalink)  
Antiguo 26/08/2008, 10:08
Avatar de estibaliz2006  
Fecha de Ingreso: noviembre-2006
Mensajes: 439
Antigüedad: 17 años, 5 meses
Puntos: 1
Respuesta: una única consulta para distintas tablas

no...esa no es una buena solución. si tu tienes los datos en una misma tabla, ¿como añades las categorías desde un panel, porque entonces por cada categoria que añadas deberás registrar el resto de datos? supongamos que quiero añadir por cada producto más de una imagen, como lo haces con una sola tabla? esa no es la solución querido chwc. la solución son las tres tablas. el problema (que será una tontería) es solucionar lo expuesto. gracias de tods modos :cora zon:
  #4 (permalink)  
Antiguo 26/08/2008, 10:19
Avatar de the_web_saint  
Fecha de Ingreso: mayo-2008
Ubicación: localhost/tierra/america/panama
Mensajes: 1.229
Antigüedad: 16 años
Puntos: 43
Respuesta: una única consulta para distintas tablas

Hola:

haz intentado usar el distinct??

Saludos!
__________________
..::The Saint::..
El pesimista se queja del viento; el optimista espera que cambie; el realista ajusta las velas.
  #5 (permalink)  
Antiguo 26/08/2008, 13:00
Avatar de estibaliz2006  
Fecha de Ingreso: noviembre-2006
Mensajes: 439
Antigüedad: 17 años, 5 meses
Puntos: 1
Respuesta: una única consulta para distintas tablas

no...a qué te refieres? me pierdo...echadme un cablecito por favor
  #6 (permalink)  
Antiguo 26/08/2008, 13:43
Avatar de the_web_saint  
Fecha de Ingreso: mayo-2008
Ubicación: localhost/tierra/america/panama
Mensajes: 1.229
Antigüedad: 16 años
Puntos: 43
Respuesta: una única consulta para distintas tablas

por ejemplo:

$sql9 = "SELECT DISTINCT field AS distinctfield FROM table ORDER BY distinctfield ";

nota: esto no tiene nada que ver con tu codigo
__________________
..::The Saint::..
El pesimista se queja del viento; el optimista espera que cambie; el realista ajusta las velas.
  #7 (permalink)  
Antiguo 26/08/2008, 13:46
Avatar de the_web_saint  
Fecha de Ingreso: mayo-2008
Ubicación: localhost/tierra/america/panama
Mensajes: 1.229
Antigüedad: 16 años
Puntos: 43
Respuesta: una única consulta para distintas tablas

hola
disculpa....

distinct sirve para que saque solo los registros únicos no los repetidos

saludos
__________________
..::The Saint::..
El pesimista se queja del viento; el optimista espera que cambie; el realista ajusta las velas.
  #8 (permalink)  
Antiguo 26/08/2008, 23:45
Avatar de estibaliz2006  
Fecha de Ingreso: noviembre-2006
Mensajes: 439
Antigüedad: 17 años, 5 meses
Puntos: 1
Respuesta: una única consulta para distintas tablas

no...esa no es la solución, porque en la base de datos no existen registros repetidos. el tema está en como mostrar todas las imágenes asociadas a un producto sin que repita los datos del producto. siguiendo con el ejemplo que he puesto sería esto:

Nombre del Producto: BOLIGRAFO
Categoría del Producto: PAPELERIA
Imagenes del Producto: IMAGEN 1, IMAGEN 2

ayuda por favor...
  #9 (permalink)  
Antiguo 27/08/2008, 01:50
Avatar de estibaliz2006  
Fecha de Ingreso: noviembre-2006
Mensajes: 439
Antigüedad: 17 años, 5 meses
Puntos: 1
Respuesta: una única consulta para distintas tablas

sabe alguien a que puede ser debido?
  #10 (permalink)  
Antiguo 27/08/2008, 09:01
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: una única consulta para distintas tablas

Hola estibaliz2006,

En ese caso tendrías que hacer otra consulta para sacar las imagenes del producto y así mostrarlas.

Saludos.
  #11 (permalink)  
Antiguo 27/08/2008, 10:42
 
Fecha de Ingreso: febrero-2003
Ubicación: La serena
Mensajes: 144
Antigüedad: 21 años, 2 meses
Puntos: 0
Respuesta: una única consulta para distintas tablas

una subquery es la solucion mas facil
__________________
Hoy dia aprendí algo nuevo.
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 10:03.