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

Elegir el de menor valor

Estas en el tema de Elegir el de menor valor en el foro de Mysql en Foros del Web. Buenos dias, mi duda es la siguiente: tengo una consulta funcionando que resumida a lo que importa sería algo así como: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código MySQL: ...
  #1 (permalink)  
Antiguo 22/03/2012, 09:03
 
Fecha de Ingreso: marzo-2010
Mensajes: 90
Antigüedad: 14 años, 7 meses
Puntos: 2
Elegir el de menor valor

Buenos dias, mi duda es la siguiente:

tengo una consulta funcionando que resumida a lo que importa sería algo así como:


Código MySQL:
Ver original
  1. SELECT PE.id, PE.precio, PR.id, PR.nombre
  2. FROM precios PE
  3. INNER JOIN productos PR ON (PE.id = PR.id)
  4. WHERE (PR.id = ".$id_prodcuto.")
  5. ORDER BY PE.fecha, PE.precio,PR.nombre


Son dos tablas , una con datos del producto y otra con el precio y datos del precio.
Cada producto tiene muchos registros de la tabla precios asociados, ya que el producto varia su precio y caracteristicas dependiendo del dia.
Mi consulta de arriba, que funciona(a no ser que al reducirla haya puesto algo mal ), saca todos los registros de la tabla precios relacionados con el producto $id_prodcuto.

Mi intención es sacar SOLO el registro de la tabla precios que tenga el campo precio más bajo.

He visto en la documentación del mysql que existe una función LEAST que tendría que ayudarme con ello, pero no he dado con la forma de aplicarla a mi ejemplo.

Gracias de antemano.
  #2 (permalink)  
Antiguo 22/03/2012, 12:13
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 meses
Puntos: 447
Respuesta: Elegir el de menor valor

Hola molinillo:

Investiga un poco acerca de la función de agrupación MIN (y por supuesto de la cláusula GROUP BY)... En el foro hemos dado muchos ejemplos de cómo obtener el valor mínimo o máximo para una tabla, es cuestión de que utilices la herramienta de búsqueda que tienes en el foro para encontrar algún tema que se asemeje a lo que quieres hacer.

Si continuas con problemas, postea algo del código que intentaste hacer y con gusto te ayudamos a corregirlo.

Saludos
Leo.
  #3 (permalink)  
Antiguo 23/03/2012, 11:53
 
Fecha de Ingreso: enero-2010
Ubicación: Estelí, Nicaragua
Mensajes: 157
Antigüedad: 14 años, 10 meses
Puntos: 8
Respuesta: Elegir el de menor valor

Hola, podrias probar lo siguiente:

si siempre quieres el precio mas bajo de la consulta y siempre sera para un solo producto, puedes ordenar la consulta por precio de manera ascendente de modo que aparezca primero el precio mas bajo y hacer un limit de 1, para que solo regrese el primer registro.

prueba y comenta, no lo he probado.

Código MySQL:
Ver original
  1. SELECT PE.id, PE.precio, PR.id, PR.nombre
  2. FROM precios PE
  3. INNER JOIN productos PR ON (PE.id = PR.id)
  4. WHERE (PR.id = ".$id_prodcuto.")
  5. ORDER BY PE.precio asc limit 1
  #4 (permalink)  
Antiguo 26/03/2012, 10:02
 
Fecha de Ingreso: marzo-2010
Mensajes: 90
Antigüedad: 14 años, 7 meses
Puntos: 2
Respuesta: Elegir el de menor valor

Hola! para emepezar lamento haber tardado tanto en contestar, he estado liado y no he podido seguir hasta hoy.

Paso a paso, leonardo, el buscador no me funciona, no se por qué cada vez que hago una busqueda me lleva o a la portada o a la ayuda de los smilys

Lenincasco, gracias por la respuesta ya había pensado en algo así, pero en mi caso no cuadra, ya que busco todos los productos de la tabla producto con el precio más bajo relacionado con el en la tabla precios, con tu ejemplo solo sacaría un producto y necesito todos los productos, lo que necesito único es el precio relacionado(q está en otra tabla)

Al final usando como me ha dicho leonardo el MIN y el GROUP BY me ha funcionado, peeeeeeeero, mi consulta ha pasado de tardar 0,017 segs a 8,55 segs.

Entonces me da a mi que mi consulta no es lo más eficiente posible, me ha quedado algo así:

Código MySQL:
Ver original
  1. SELECT MIN(PE.precio) AS precio,PE.id,  PR.id, PR.nombre
  2.       FROM precios PE
  3.       INNER JOIN productos PR ON (PE.id = PR.id)
  4.       WHERE (PR.id = ".$id_prodcuto.")
  5.       GROUP BY PE.id_producto
  6.       ORDER BY PE.fecha, PE.precio,PR.nombre
  #5 (permalink)  
Antiguo 26/03/2012, 11:36
 
Fecha de Ingreso: enero-2010
Ubicación: Estelí, Nicaragua
Mensajes: 157
Antigüedad: 14 años, 10 meses
Puntos: 8
Respuesta: Elegir el de menor valor

Cita:
Iniciado por molinillo Ver Mensaje
Lenincasco, gracias por la respuesta ya había pensado en algo así, pero en mi caso no cuadra, ya que busco todos los productos de la tabla producto con el precio más bajo relacionado con el en la tabla precios, con tu ejemplo solo sacaría un producto y necesito todos los productos, lo que necesito único es el precio relacionado(q está en otra tabla)
Como en la consulta que pones de ejemplo, tienes where id=idproducto,
se asume que siempre tendras un solo producto, pero igual si quieres todos, prueba esta otra alternativa a ver que tal va.

entonces tienes que dividir la consulta en dos partes,

la primera que te devuelva el menor precio de la tabla precio, agrupado por productos.
y la segunda que obtenga los valores del producto unida con la primera consulta.

algo mas o menos asi

Código MySQL:
Ver original
  1. select t1.id,producto,t2.precio from productos t1
  2. select id,min(precio) precio from precios group by id) t2
  3. on t1.id=t2.id;


espero te oriente un poco mas.

Última edición por LENINCASCO; 26/03/2012 a las 11:44
  #6 (permalink)  
Antiguo 26/03/2012, 12:13
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 meses
Puntos: 447
Respuesta: Elegir el de menor valor

Hola molinillo:

A reserva de que pruebes la consulta de LENINCASCO (que de hecho es el tipo de consulta que tenía pensado desde un principio para que realizaras por tu cuenta aunque creo que falta una condición AND T1.precio = T2.precio ) te hago el siguiente comentario... Por lo general, cuando una consulta tarda demasiado en ejecutarse puede ser por las siguientes razones.

1. hay demasiados registros en la tabla
2. la consulta es muy compleja
3. Problemas de comunicación
4. Bloqueo de tablas
5. SE TIENE UN MANEJO DEFICIENTE DE ÍNDICES

Pongo el último punto en mayúsculas porque lamentablemente este suele ser la principal razón de la lentitud en las consultas. Es conveniente que nos digas qué campos estás manejando como índices, el volumen de información que estás manejando y que apliques un EXPLAIN a tu consulta y nos digas los resultados...

Saludos
Leo.
  #7 (permalink)  
Antiguo 29/03/2012, 05:22
 
Fecha de Ingreso: marzo-2010
Mensajes: 90
Antigüedad: 14 años, 7 meses
Puntos: 2
Respuesta: Elegir el de menor valor

Gracias de nuevo por vuestro tiempo y paciencia, voy a probar lo que me decis y os comento algo.

Por cierto, veo que me falta un dato muy importante al ver vuestras respuestas que no dejo claro: Salen todos los productos por que la consulta está dentro de un WHILE de php, creo que es un dato que tenia que haber dado desde el principio , srry

Etiquetas: elegir, join, menor, registros, select, sql, tabla, campos
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:19.