Ver Mensaje Individual
  #3 (permalink)  
Antiguo 03/07/2015, 18:01
Avatar de gnzsoloyo
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, 5 meses
Puntos: 2658
Respuesta: Problema al buscar por precio

Este es un tema recurrente... Vamos a ver si se entiende bien:
1) NUNCA se almacenan valores numéricos en campos VARCHAR. Para eso se han creado los INT, DECIMAL, FLOAT y los demás.
2) NUNCA se almacenan los separadores de miles. Esos NO EXISTEN para los sistemas informáticos, sino que son temas de REPRESENTACION VISUAL.
3) Cuando almacenas un numero como VARCHAR, estás a) desperdiciando espacio de almacenamiento, ya que los números no se almacenan como cifras sino como binarios, y b) generando ordenamientos erróneos.
4) Cuando realizas consultas en SQL debes recordar que EL PUNTO ES EL SEPARADOR DE DECIMALES, no de miles

Usa esto y luego la visualización de datos la resuelves en PROGRAMACION:

Código MySQL:
Ver original
  1. CREATE TABLE IF NOT EXISTS `ventas` (
  2.     `precio` DECIMAL(14, 2 ) DEFAULT NULL,
  3.     PRIMARY KEY (`id`)
  4.  
  5. --
  6. -- Volcado de datos para la tabla `ventas`
  7. --
  8.  
  9. INSERT INTO `ventas` (`id`, `precio`) VALUES
  10. (253,  65000 ),
  11. (591,  30800 ),
  12. (827,  1077600 ),
  13. (880,  1953700 ),
  14. (954,  2800000 ),
  15. (967,  1150000 ),
  16. (1005,  1595900 ),
  17. (1066,  1690000 ),
  18. (1122,  1150000 ),
  19. (1128,  120000 ),
  20. (1190,  1000000 ),
  21. (1234,  1380000 ),
  22. (1276,  1678.00 ),
  23. (1286,  27000 ),
  24. (1335,  29000 ),
  25. (1385,  132500 ),
  26. (1538,  28800 ),
  27. (1962,  79000 ),
  28. (1975,  25000 ),
  29. (2019,  24900 ),
  30. (2050,  1100000 ),
  31. (2084,  70000 ),
  32. (2091,  80000 ),
  33. (2096,  125000 ),
  34. (2139,  126352 ),
  35. (2143,  22000 ),
  36. (2151,  30000 ),
  37. (2173,  145258 ),
  38. (2174,  125147 );

REspecto al punto 4:
Código MySQL:
Ver original
  1. mysql>     SELECT *
  2.     ->     FROM ventas
  3.     ->     WHERE precio > 80000
  4.     ->     ORDER BY precio ASC
  5.     ->     LIMIT 0 , 30;
  6. +------+------------+
  7. | id   | precio     |
  8. +------+------------+
  9. | 1128 |  120000.00 |
  10. | 2096 |  125000.00 |
  11. | 2174 |  125147.00 |
  12. | 2139 |  126352.00 |
  13. | 1385 |  132500.00 |
  14. | 2173 |  145258.00 |
  15. | 1190 | 1000000.00 |
  16. |  827 | 1077600.00 |
  17. | 2050 | 1100000.00 |
  18. | 1122 | 1150000.00 |
  19. |  967 | 1150000.00 |
  20. | 1234 | 1380000.00 |
  21. | 1005 | 1595900.00 |
  22. | 1066 | 1690000.00 |
  23. |  880 | 1953700.00 |
  24. |  954 | 2800000.00 |
  25. +------+------------+
  26. 16 rows in set (0.00 sec)

Por favor, presta atención a lo que te digo. Es muy importante que uses los tipos de datos CORRECTOS, y resuelvas la representación visual en la capa que corresponde, y no es en la BBDD
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)