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

[SOLUCIONADO] Productos y gastos de envio

Estas en el tema de Productos y gastos de envio en el foro de Mysql en Foros del Web. Hola a todos, les comento tengo una tbla productos con los campos id,nombre precio y peso e intento mostrar cuanto cuesta el envio de cada ...
  #1 (permalink)  
Antiguo 06/05/2013, 05:26
 
Fecha de Ingreso: febrero-2010
Mensajes: 157
Antigüedad: 14 años, 2 meses
Puntos: 5
Productos y gastos de envio

Hola a todos, les comento tengo una tbla productos con los campos id,nombre precio y peso e intento mostrar cuanto cuesta el envio de cada producto unitario, tengo una tabla de transporte que tiene los campos peso y coste, por ejemplo

Peso Coste
5 3.25
10 5.25
15 7.32


la cosulta la estoy haciendo asi
select p.*, k.* from productos p join transporte k on k.peso >= p.peso

Pero claro me muestra los productos por trilicado, entonces los agrupo por id

select p.*, k.* from productos p join transporte k on k.peso >= p.peso group by p.id

No se si es la manera o no correcta de hacer esto. alguna idea??
  #2 (permalink)  
Antiguo 06/05/2013, 06:43
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: Productos y gastos de envio

Código MySQL:
Ver original
  1. select p.* from productos p join transporte k on k.peso >= p.peso
__________________
Fere libenter homines, id quod volunt, credunt.
  #3 (permalink)  
Antiguo 06/05/2013, 08:37
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Productos y gastos de envio

Hola yeyowave:

Vayamos por partes... no posteas cuál es la estructura de tus tablas ni nos pones datos de ejemplo, por lo tanto no es posible determinar dónde está el error... creo que deberías de comenzar por ese aspecto, sin embargo, algunos aspectos que debes tener a consideración.

1. Verifica que estés colocando en la condición ON TODAS LAS RELACIONES existentes entre las tablas. Cuando falta alguna condición, se realiza un PRODUCTO CARTESIANO, y por lo tanto los datos pueden aparecer como "duplicados"

2. Es necesario utilizar una condición >=? no entiendo la lógica de tu consulta, pues no nos dices qué es lo que pretendes hacer... sin embargo, al utilizar JOIN's por lo general debes utilizar condiciones de igualdad, no de mayor qué.

3. La agrupación, si bien puede funcionar para eliminar "Duplicados", tampoco es una solución, pues la agrupación sólo la estás haciendo por ID, por lo tanto, el resto de los campos puede ser que no te presente la información que requieras.

Tal como puse al inicio, te recomiendo que comiences posteando la estructura de tus tablas, poniendo algunos datos de ejemplo, definiendo cómo están relacionadas las tablas y diciendo qué es lo que esperas como salida. Con esta información será más sencillo tratar de ayudarte.

Saludos
Leo.
  #4 (permalink)  
Antiguo 06/05/2013, 09:25
 
Fecha de Ingreso: febrero-2010
Mensajes: 157
Antigüedad: 14 años, 2 meses
Puntos: 5
Respuesta: Productos y gastos de envio

hola, no se como dibujar las tablas aqui.

la estructura de la tabla producto es asi

id,nombre precio y peso

1, producto 1, 12.25, 3
2, producto 2, 7.5, 1
3, producto 3, 15, 10

la estructura de la tabla de envio es asi

Peso(kg), Coste
5, 3.25
10, 5.25
15, 7.32


el => es para que si el producto pesa 4kg seleccione el peso de 4 o mayor en caso de no tener una tarifa especifica para ese peso

como dice repara2 la consulta seria

SELECT p.* FROM productos p JOIN transporte k on k.peso >= p.peso

de esta forma mostraria los productos de ahi que añada el k.coste

SELECT p.*,k.coste FROM productos p JOIN transporte k on k.peso >= p.peso

ahora muestra todos los productos, pero como el peso es igual o superior muestra de esta forma

id,nombre precio, peso,coste
1, producto 1, 12.25, 3, 3.25
1, producto 1, 12.25, 3, 5.25
1, producto 1, 12.25, 3, 7.32
2, producto 2, 7.5, 1, 3.25
2, producto 2, 7.5, 1, 5.25
2, producto 2, 7.5, 1, 7.32
3, producto 3, 15, 10, 5.25
3, producto 3, 15, 10, 7.32

lo que busco es que liste asi

id,nombre precio, peso,coste
1, producto 1, 12.25, 3, 3.25
2, producto 2, 7.5, 1, 3.25
3, producto 3, 15, 10, 5.25

de ahi mi consulta si la forma de acerlo seria agrupando por p.id
SELECT p.*,k.coste FROM productos p JOIN transporte k on k.peso >= p.peso group by p.id

Espero haberme expresado con claridad.

Gracias
  #5 (permalink)  
Antiguo 06/05/2013, 10:03
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: Productos y gastos de envio

Es que lo que estás haciendo es mezclar caballos con manzanas. Esas tablas no están relacionadas, porque una es una tabla de pedidos de envío y la otra es una tabla paramétrica, de donde surgen los costos de envío. Pero no hay una relación entre la PK de ambas y por tanto no sirven para hacer un JOIN.
De todos modos se puede, pero forzosamente tienes que generar un producto cartesiano para obtener lo que quieres, y además a esa tabla de "envios" le está faltando el límite inferior o superior del rango para ser útil.
Es decir, cuando planteas una tabla de parámetros semejantes, donde estableces un límite de peso para un precio dado, debes incluir ambos límites: Desde qué peso y hasta qué peso. De lo contrario la consulta se complica.
La idea es que se pueda hacer algo como:
Código MySQL:
Ver original
  1. SELECT p.*,k.coste
  2. FROM productos p, transporte k
  3. WHERE p.peso BETWEEN k.pesodesde AND k.pesohasta

El problema de esta consulta es que MYSQL intentará hacer un matching entre los "ID" de las tablas porque tienen el mismo nombre, por lo que el resultado final puede ser completamente erróneo.

En realidad, la solución correcta es a través de otro tipo de diseño de datos. Es decir, el modelo que aplicas no es útil para lo que quieres, porque no está correctamente diseñado.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 06/05/2013, 10:13
 
Fecha de Ingreso: febrero-2010
Mensajes: 157
Antigüedad: 14 años, 2 meses
Puntos: 5
Respuesta: Productos y gastos de envio

buenas compañero, no es una tabla de pedidos de envio, es una tabla de productos, lo que quiero es listar el precio del envio del producto en particular.
  #7 (permalink)  
Antiguo 06/05/2013, 10:30
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: Productos y gastos de envio

Bueno, también a eso me refiero: En esas condiciones, no se puede porque estás mezclando caballos con manzanas...
Los valores de los pesos de los envíos deben componer una categoría de precios, y es a la categoría donde el producto se debe referir. Además la misma categoría debe siempre establecer el rango completo de pesos que incluye, y no sólo un peso base. De lo contrario la consulta se complica, como ya te dije, pudiendo, según el caso, volverse extremadamente ineficiente.
En otras palabras, la tabla "envío" que tienes (y que debería llamarse de otro modo) debería contener:
Código MySQL:
Ver original
  1. Precios_envios(
  2. denominacion VARCHAR(100) NULL,
  3. peso_desde DECIMAL(10,3) NOT NULL
  4. peso_hasta DECIMAL(10,3) NOT NULL,
  5. precio_coste DECIMAL(10,2) NOT NULL);
Recién con una estructura aproximada a esta forma, esa tabla servirá para hacer consultas eficientes.

Una nota: Yo ya estuve participando en el desarrollo de un sistema de envios de cargas generales para una empresa de transporte, y creo que hay un concepto que no estás toamdo en cuenta. Me lo dijo uno de los gerentes, cuando hablamos del sistema de categorización de precios de acuerdo al producto enviado:
"Un kilo de plumas y un kilo de plomo pesan lo mismo, pero no cuesta lo mismo transportarlo..."

En los hechos, un kilo de plumas puede ocupar medio metro cúbico de espacio, mientras que un kilo de plomo... bueno, no llega a los 100 cc...
¿Lo has considerado?

__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 06/05/2013 a las 10:44
  #8 (permalink)  
Antiguo 06/05/2013, 10:43
 
Fecha de Ingreso: febrero-2010
Mensajes: 157
Antigüedad: 14 años, 2 meses
Puntos: 5
Respuesta: Productos y gastos de envio

ok, comprendido pues

Etiquetas: campo, gastos, join, productos, select, 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 01:57.