Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Varios valores dentro de una misma fila

Estas en el tema de Varios valores dentro de una misma fila en el foro de Mysql en Foros del Web. Qué tal, mi consulta es la siguiente: Tengo una base de datos para venta de productos. La tabla "productos" debe tener el nombre del producto, ...
  #1 (permalink)  
Antiguo 07/07/2011, 23:28
 
Fecha de Ingreso: febrero-2011
Mensajes: 6
Antigüedad: 13 años, 2 meses
Puntos: 0
Varios valores dentro de una misma fila

Qué tal, mi consulta es la siguiente:

Tengo una base de datos para venta de productos.
La tabla "productos" debe tener el nombre del producto, y la descripcion del producto.
La tabla "descripción" la tengo creada aparte de la tabla "producto", en una relación de uno a muchos. (1 producto, muchas descripciones)

Mi problema es que las descripciones son varias.

Ejemplo: Producto 1 :

Nombre: producto 1.

1. gran capacidad (descripcion)
2. buena respuesta (descripcion)
3. buena memoria (descripcion)

Mi pregunta es entonces cómo tendría que hacer para que en un while me muestre todas las descripciones que haya insertado, y sí la tabla "descripción" tendría que ser una sola.

Lo he tratado de hacer pero lo que me sucede es que por ejemplo al realizar la consulta me muestra las 3 descripciones, pero en 3 filas distintas, ya que me repite 3 veces el producto 1.

Espero se haya entendido y me puedan dar una mano, saludos !
  #2 (permalink)  
Antiguo 08/07/2011, 06:40
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Varios valores dentro de una misma fila

Como el numero de descripciones de un producto es variable la solucion con querys es muy complicada.

Seguro que es mas eficiente que con programación externa presentes los datos como los quieres, con la query que te repite el producto tantas veces como descripciones tenga puedes mostrar el nombre del producto y luego concatenar las descripciones mientras no cambie el producto.... y obtener algo así

Producto1

Gran capacidad (descripcion). Buena respuesta (descripcion). Buena memoria (descripcion)

Producto2

Gran capacidad (descripcion). Buena respuesta (descripcion). Buena memoria (descripcion)


La estructura que tienes no és optima la relacion deberia ser n:m para no guardar descripciones repetidas, con lo que necesitarias una tabla intermedia.

Productos
idProducto
Nombre
...

Descripciones
idDescripcion
Descripcion
...

RelProductoDescripcion
idProducto
idDescripcion
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 08/07/2011, 10:08
 
Fecha de Ingreso: febrero-2011
Mensajes: 6
Antigüedad: 13 años, 2 meses
Puntos: 0
Respuesta: Varios valores dentro de una misma fila

Muchas gracias quimfv !!
Voy a probar esa solución, saludos !
  #4 (permalink)  
Antiguo 11/07/2011, 22:34
 
Fecha de Ingreso: febrero-2011
Mensajes: 6
Antigüedad: 13 años, 2 meses
Puntos: 0
Respuesta: Varios valores dentro de una misma fila

Bueno he realizado la siguiente consullta:

Cita:
SELECT producto.Nombre as Nombre, group_concat(descripcion.Descripcion separator ' , ') as Descripciones FROM producto
INNER JOIN descripcion_producto on Producto_idProducto =idProducto
INNER JOIN descripcion on Descripcion_idDescripcion = idDescripcion
GROUP BY idProducto
Y he logrado tener este resultado :

Nombre I Descripciones
Producto a I Buena memoria,buena recepción
Producto b I Gran capacidad, buena respuesta

Es decir que he logrado concatenar y separar por comas como me has dicho.
El tema es que en este caso necesitaría que me muestre las descripciones en diferentes columnas, es decir:

Nombre I Descripciones I Descripciones
Producto a I Buena memoria I Buena recepcion

Es posible realizar esto en MySql ?
Gracias nuevamente.
  #5 (permalink)  
Antiguo 12/07/2011, 06:30
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Varios valores dentro de una misma fila

Cita:
Como el numero de descripciones de un producto es variable la solucion con querys es muy complicada.

Seguro que es mas eficiente que con programación externa presentes los datos como los quieres...
Si cambias la coma por un tabulador te dará columnas (un numero variable para cada producto), no se que estas usando para mostrar los datos....

Si estas intentando hacer una consulta de referencias cruzadas (TRANSFORM) en mysql no existe. Debes construirla con programación externa....http://forums.mysql.com/read.php?10,81701,81701, pero no creo que sea lo que quieres...
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #6 (permalink)  
Antiguo 12/07/2011, 19:41
 
Fecha de Ingreso: febrero-2011
Mensajes: 6
Antigüedad: 13 años, 2 meses
Puntos: 0
Respuesta: Varios valores dentro de una misma fila

Para mostrar los datos estoy utilizando php.
Mi idea es que por ejemplo a través de un "while" y luego un"echo $row["descripcion"]" me muestre las descripciones pero no concatenadas, sino una abajo de otra y todas con el misma clase de"div" antes de cada descripcion, voy a copiar una parte del código para que se entienda mejor:

Cita:
while ($r=mysql_fetch_array($result)) {


$descripcion=$r["Descripciones"];
?>

<table class="descripcion">
<tr>
<td class="descripciones" colspan="2">
<div class="mota">· </div><p> <?php echo $descripcion ?></p>
</td>
</tr>
</table>

<?php
}
?>
  #7 (permalink)  
Antiguo 13/07/2011, 02:20
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Varios valores dentro de una misma fila

Esto es bases de datos no php, en el foro de php seguramente te ayudaran mejor, pero ya que estamos...

Olvidate del concat, usa la consulta que te repetia los productos con sus descripciones y usa lo siguiente



Código PHP:
Ver original
  1. <?php
  2. $producto="0";  ///Variable procuto para controlar las repeticiones (supongo que no hay ningun producto=0)
  3. while ($r=mysql_fetch_array($result)) {
  4.        if($producto!=$r["producto"]){?>   ////El primer producto es diferente de cero con lo que se mostrará el nombre
  5.            <div class="producto"><?=$r["producto"];?></div>
  6.            <div class="mota">· </div>
  7. <?php
  8.            $producto=$r["producto"];////Paso el primer producto a la variable de control para evitar repeticiones hasta que aparezca el segundo
  9.         }
  10. ?>
  11.             <div class="descripciones"><?=$r["Descripciones"]?></div>
  12. <?php
  13. }
  14. ?>


o algo por el estilo.

Lo he escrito al vuelo puede haber errores de sintaxis...
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 13/07/2011 a las 04:39
  #8 (permalink)  
Antiguo 14/07/2011, 17:37
 
Fecha de Ingreso: febrero-2011
Mensajes: 6
Antigüedad: 13 años, 2 meses
Puntos: 0
Respuesta: Varios valores dentro de una misma fila

Muchas gracias por tu ayuda! Voy a preguntar en el foro de php.

Etiquetas: fila, tabla
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 11:57.