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

Consulta mysql con campos a agrupar

Estas en el tema de Consulta mysql con campos a agrupar en el foro de Bases de Datos General en Foros del Web. Tengo una duda con una consulta , necesito ver si alguien me puede ayudar. Tengo una tabla en mi base de datos con info de ...
  #1 (permalink)  
Antiguo 25/07/2010, 16:26
 
Fecha de Ingreso: julio-2010
Mensajes: 4
Antigüedad: 13 años, 9 meses
Puntos: 0
Consulta mysql con campos a agrupar

Tengo una duda con una consulta , necesito ver si alguien me puede ayudar.

Tengo una tabla en mi base de datos con info de productos.
Esta tabla tiene idProducto, categoria, subcategoria, codigo, descripcion, stock, proveedor, marca, moneda y precio.

Particularmente mi problema es con los campos moneda y precio, ya que en ellos se acumulan la moneda (puede estar en pesos o dolares) y en precio el valor. Luego con código php, armo una función que toma el valor del dolar de otra tabla y actualiza los productos que estén en dólares para poder mostrar todo el catálogo en pesos. Hasta aquí todo bien.

Mi problema es que a la lista de resultados le agregue un filtro para listar los productos en orden ascendenete o descendente, pero cuando lo hacen por precio, en la base de datos el valor es en pesos y dolares por lo que se muestra no es en orden correcto.

¿Hay posibilidad de hacer una consulta que ya me devuelva un valor de precio en pesos solamente?
La estrucutura sería más o menos así de lo que estuve pensando: "SELECT moneda, precio AS valor FROM productos" pero lo que necesito es que si es en dólares lo multiplique por el valor del dolar.
Esta es la función con la que armo mi consulta a la base.

// Obtener productos
function GetProductos($categoria='', $subcategoria='', $campo='', $orden=''){
// Defino el WHERE para ver si es una categoría o el listado completo
if(!empty($categoria) || !empty($subcategoria))
$condicion = "WHERE categoria = '".$categoria."' AND subcategoria = '".$subcategoria."'";

// Defino el ORDER
if(empty($campo) || empty($orden)){
$order = "ORDER BY codigo ASC";
}else{
$order = "ORDER BY ".$campo." ".$orden."";
}

$consulta = "SELECT * FROM productos ".$condicion." ".$order."";
$resultado = mysql_query($consulta) or die ("<b>Fallo al seleccionar productos:</b><br />".mysql_error()."");
return $resultado;
}

Muchas gracias
  #2 (permalink)  
Antiguo 26/07/2010, 08:50
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Consulta mysql con campos a agrupar

creo que tu problema es este:
Cita:
Particularmente mi problema es con los campos moneda y precio, ya que en ellos se acumulan la moneda (puede estar en pesos o dolares) y en precio el valor. Luego con código php, armo una función que toma el valor del dolar de otra tabla y actualiza los productos que estén en dólares para poder mostrar todo el catálogo en pesos. Hasta aquí todo bien.
imagino que tienes dos tablas
tablaventa y tablamonedas

Si tú tienes en tablamonedas el campo valor en pesos o dólares
imagina:
tablamonedas
idtblmoneda, moneda, valorpeso



y en la tablaventas
idventa, producto, precio, moneda

Piensa que de esa manera puedes añadir otras monedas y también que los cambios serán dinámicos: bastará con cambiar el valorpeso del dólar o la moneda que sea para que se cambie todo el orden. Pero, ojo, esto puede alterar datos de interés, pues los cambios de moneda podrían alterar tu histórico. Quizás deberías crear un par de campos más para saber el cambio del momento y el precio final y guardarlo, y ordenar por ese dato almacenado. Yo lo preferiría. No obstante, si no necesitas nada de eso y es sólo para ordenar, te bastará con lo que te propongo:
en el campo moneda (que debaría ser INT) guardas el valor de idtblmoneda correspondiente, o incluso guardando el nombre de la moneda (en este caso VARCHAR; pero, cuidado con los nombres iguales con distintos valores: mejor un idtblmoneda), te resultará fácil ordenar como quieres con un sencillo producto

SELECT * FROM tablamonedas m INNER JOIN tablaventas v ON m.idtblmoneda = v.moneda ORDER BY v.precio * m.valorpeso DESC

Esta es la idea.

Última edición por jurena; 26/07/2010 a las 08:56
  #3 (permalink)  
Antiguo 26/07/2010, 10:47
 
Fecha de Ingreso: julio-2010
Mensajes: 4
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Consulta mysql con campos a agrupar

Gracias Jurena, voy aprobar esta solución. No se si es exactamente lo que necesito pero me ha dado una gran idea de como hacerlo.
Cualquier cosa posteare nuevamente el avance.
Saludos
  #4 (permalink)  
Antiguo 26/07/2010, 13:36
 
Fecha de Ingreso: julio-2010
Mensajes: 4
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Consulta mysql con campos a agrupar

Mil gracias Jurena, tu respuesta me abrió la puerta de la respuesta.

Deja la resolución por si interesa.

Código PHP:
Ver original
  1. // Obtengo lista de productos
  2.    function GetProductosHome($categoria='', $subcategoria='', $campo='', $orden=''){
  3.             // Defino el WHERE
  4.             if(!empty($categoria) || !empty($subcategoria))
  5.             $condicion = "WHERE categoria = '".$categoria."' AND subcategoria = '".$subcategoria."'";
  6.            
  7.             // Defino el ORDER
  8.             if(empty($campo) || empty($orden)){
  9.             $order = "ORDER BY codigo ASC";
  10.             }else{
  11.             $order = "ORDER BY ".$campo." ".$orden."";
  12.             }
  13.  
  14.             $consulta = "SELECT *,
  15.                          (p.precio * m.valor) AS precio
  16.                          FROM productos p
  17.                          INNER JOIN monedas m
  18.                          ON p.moneda = m.moneda
  19.                          ".$condicion."  ".$order."";
  20.             $resultado = mysql_query($consulta) or die ("<b>Fallo al seleccionar productos:</b><br />".mysql_error()."");
  21.             return $resultado;
  22.          }

Saludos

Etiquetas: agrupar, campos, mysql
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 09:46.