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

consulta repeticion resultados

Estas en el tema de consulta repeticion resultados en el foro de Mysql en Foros del Web. Hola tropa :)) Haber si me echan una mano, aviso que soy novato en mysql y estoy aprendiendo muchas cosas, pero hay una que se ...
  #1 (permalink)  
Antiguo 28/09/2012, 05:15
 
Fecha de Ingreso: febrero-2010
Mensajes: 157
Antigüedad: 14 años, 2 meses
Puntos: 5
consulta repeticion resultados

Hola tropa :))

Haber si me echan una mano, aviso que soy novato en mysql y estoy aprendiendo muchas cosas, pero hay una que se me escapa.

La idea:
Meto en una session de asp(carrito) varios id de productos, y ahora quiero montar una query para que me liste esos productos.

Select * from productos where id in (session de asp) lista los productos bien...

pero lista los produtos sin duplicarlos, me explico si yo a esa session de asp (carrito), meto 2 veces el id '1454' en la consulta anterior me lo muestra 1 sola vez, yo necesitaria que mostrara el producto tantas veces como lo he metido en la session de asp (carrito)

Es posible???
Gracias por vuestro tiempo
  #2 (permalink)  
Antiguo 28/09/2012, 06:40
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: consulta repeticion resultados

Estás cometiendo un error de diseño a nivel de software.
Cuando creas una "canasta" de compras de ese tipo aplicas la misma lógica que cuando haces compra en un supermercado, donde no importa cuantas veces tomes un producto, el mismo no se lista una vez por cada instancia a menos que el producto en sí tenga alguna característica que le de identidad, como un numero de serie específico o algo semejante.
Un ejemplo, usando el supermercado sería:
Supongamos que tomas tres cajas de doce envases de leche de un litro cada uno, cuando llegas a la caja, ¿qué es más sensato?
Poner esto:
Cita:
1 Leche envase 1 litro cartón.
1 Leche envase 1 litro cartón.
1 Leche envase 1 litro cartón.
...
1 Leche envase 1 litro cartón.
un total de 36 veces
O hacer esto:
Cita:
3 Cajas leche envase cartón x 12 unidades.
una sola vez.

En definitiva, lo que debes hacer es que cada vez que agregas un producto dado a la canasta de compras, verificar si ya lo has agregado y sumar la cantidad de unidades que corresponda para uso en la facturación final. Pero no pretender listar N veces un producto que pusiste N veces...

¿No te parece?

Luego simplemente usas la cantidad de unidades para hacer el calculo correspondiente y la emisión del pedido.

Sólo se justifica listar N veces en aquellos casos que, como ya te dije, tienen algún atributo que los hace únicos, o bien corresponden a diferentes tipos de unidades de un mismo producto.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 28/09/2012, 10:23
 
Fecha de Ingreso: febrero-2010
Mensajes: 157
Antigüedad: 14 años, 2 meses
Puntos: 5
Respuesta: consulta repeticion resultados

hola, no estoy cometiendo error de diseño, simplemente queria hacerlo de otra forma, se que en los carritos se mete el id y luego le sumamos o le restamos la cantidad deseada, pero vamos que si no se puede no se puede, lo haremos como siempre y listo, si alguien tiene la solucion seria interesante para este utros fines......
  #4 (permalink)  
Antiguo 28/09/2012, 14:53
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: consulta repeticion resultados

Hola yeyowave:

Si bien es cierto lo que tienes puede no ser un error de diseño, me cuesta encontrar una razón de peso para hacer lo que estás pidiendo... es decir ¿Qué sentido le encuentras a mostrar la información de esta manera? estéticamente se ve muy mal, considero que es un desperdicio de espacio y algo completamente innecesario, pero igual y tu tienes alguna razón que nos pueda convencer de lo contrario... Pero bueno, como hay ocasiones en que a final de cuentas un programador puede estar supeditado a lo que el cliente pide... ("Jerarquía mata razón" escuché alguna vez en una reunión con altos directivos), veamos una opción para hacer lo que quieres (aunque insisto que no le veo caso)

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tabla;
  2. +------+-------------+
  3. | id   | descripcion |
  4. +------+-------------+
  5. |    1 | uno         |
  6. |    2 | dos         |
  7. |    3 | tres        |
  8. +------+-------------+
  9. 3 rows in set (0.01 sec)
  10.  
  11. mysql> SELECT * FROM tabla WHERE id IN (1, 1, 1, 2, 3, 3);
  12. +------+-------------+
  13. | id   | descripcion |
  14. +------+-------------+
  15. |    1 | uno         |
  16. |    2 | dos         |
  17. |    3 | tres        |
  18. +------+-------------+
  19. 3 rows in set (0.00 sec)
  20.  
  21. mysql> SELECT * FROM tabla WHERE id = 1
  22.     -> UNION ALL
  23.     -> SELECT * FROM tabla WHERE id = 1
  24.     -> UNION ALL
  25.     -> SELECT * FROM tabla WHERE id = 1
  26.     -> UNION ALL
  27.     -> SELECT * FROM tabla WHERE id = 2
  28.     -> UNION ALL
  29.     -> SELECT * FROM tabla WHERE id = 3
  30.     -> UNION ALL
  31.     -> SELECT * FROM tabla WHERE id = 3;
  32. +------+-------------+
  33. | id   | descripcion |
  34. +------+-------------+
  35. |    1 | uno         |
  36. |    1 | uno         |
  37. |    1 | uno         |
  38. |    2 | dos         |
  39. |    3 | tres        |
  40. |    3 | tres        |
  41. +------+-------------+
  42. 6 rows in set (0.01 sec)

Observa que la cláusula IN en realidad no te sirve para nada, pues esta descarta los valores repetidos, la opción sería no utilizar esta u hacer una iteración o un UNION ALL para cada uno de los elementos... esto obviamente no tiene nada de eficiente, pero de entrada es lo único que se me ocurre para hacer lo que quieres.

Saludos
Leo.

Etiquetas: repeticion, resultados, select, 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 11:37.