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

Comprobar en una tabla u otra con if MySQL

Estas en el tema de Comprobar en una tabla u otra con if MySQL en el foro de Mysql en Foros del Web. Buenas, A ver si podeis echarme un cable, que realmente no se si es posible o no, veamos tengo una web que es una tienda ...
  #1 (permalink)  
Antiguo 09/05/2012, 10:17
 
Fecha de Ingreso: febrero-2002
Ubicación: Sabadell
Mensajes: 253
Antigüedad: 22 años, 1 mes
Puntos: 5
Pregunta Comprobar en una tabla u otra con if MySQL

Buenas,

A ver si podeis echarme un cable, que realmente no se si es posible o no, veamos tengo una web que es una tienda y debo controlar que cuando no haya stock del producto no se muestre, el caso es que, puede que haya stock del producto o puede que el producto este dividido en varias opciones donde lo que marcaría el stock serían las opciones.

Ej.:

Pongo un jersey único y exclusivo, la tabla productos se encara del stock del jersey, pero si luego añado ese mismo jersey en diversos colores y tallas y tengo diferente stock, entonces el stock es llevado por la tabla r_productos_complementarios y ahí es donde se me complica un poco la cosa, con lo cual estoy intentando tirar de esta consulta:

SELECT p.id_producto, p.id_tienda, pi.nombre, p.segunda_mano, pi.nombre_amigable, p.referencia, p.precio_con_iva, p.precio_rebajado, if(precio_rebajado > 0, precio_rebajado, precio_con_iva) AS precio_final, p.stock, i.imagen_producto, ci.categoria
FROM productos_idiomas pi, categorias c, categorias_idiomas ci, productos p
LEFT JOIN imagenes_productos i ON p.id_producto = i.id_producto AND i.portada = 1
WHERE p.activo = 1
AND p.id_producto = pi.id_producto
AND c.id_categoria = p.id_categoria
AND c.id_categoria = ci.id_categoria
AND if(p.stock = -1,1,(select (p.stock - COALESCE(sum(cc_d.cantidad),0)) as total_productos from cc_desglose cc_d, cc WHERE p.id_producto = cc_d.id_producto AND cc_d.id_cc = cc.id_cc AND cc.estado >= 2) >0)
GROUP By p.id_producto ORDER By pi.nombre

Esta me está funcionando para mostrar los productos que tengan stock que sean únicos el problema es que no se como hacerlo para hacerlo en la misma query que consulte si es uno u otro y busque el stock en la tabla que toca, el intento que he hecho ha sido el siguiente:

SELECT p.id_producto, p.id_tienda, pi.nombre, p.segunda_mano, pi.nombre_amigable, p.referencia, p.precio_con_iva, p.precio_rebajado, if(precio_rebajado > 0, precio_rebajado, precio_con_iva) AS precio_final, p.stock, i.imagen_producto, ci.categoria
FROM productos_idiomas pi, categorias c, categorias_idiomas ci, productos p
LEFT JOIN imagenes_productos i ON p.id_producto = i.id_producto AND i.portada = 1
WHERE p.activo = 1
AND p.id_producto = pi.id_producto
AND c.id_categoria = p.id_categoria
AND c.id_categoria = ci.id_categoria
AND if(select count(id_producto_complementario) from r_productos_complementarios where id_producto = p.id_producto,
if(p.stock = -1,1,(select (p.stock - COALESCE(sum(cc_d.cantidad),0)) as total_productos from cc_desglose cc_d, cc WHERE p.id_producto = cc_d.id_producto AND cc_d.id_cc = cc.id_cc AND cc.estado >= 2) >0),
p.id_producto = 16)
GROUP By p.id_producto ORDER By pi.nombre

Pero no me ha dado resultado, a ver si podeis echarme un cable :)

Como se puede ver lo que es el CC es el carro de la compra y compruebo lo que se ha vendido con lo que hay en stock en la tabla productos.

Muchas gracias por adelantado a ver si podeis echarme un cable :)
  #2 (permalink)  
Antiguo 09/05/2012, 11:42
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Comprobar en una tabla u otra con if MySQL

Me temo que tu diseño no este muy bien normalizado, muestranos los scripts de creación de las tablas para entender la situación....

Yo optaria por tener el stock de todos los productos en el mismo sitio, siguiendo tu ejemplo si un jersey lo tienes en varios colores lo guardas relacionandolo con los colores... es que si solo tienes un jersey este no tiene color... luego guarda ese color y ya podras guardar el stock de todos los productos de la misma forma y no tendras que usar ese IF que intentas usar.... Y si me apuras crea una categoria UNICO que te permita realcionar todos los productos que no tengan categorias....

Y por favor (des de Sabadell) usa el Highlight se lee mejor el codigo....
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 09/05/2012, 14:19
Avatar de fahs82  
Fecha de Ingreso: abril-2012
Ubicación: guadalajara
Mensajes: 139
Antigüedad: 12 años
Puntos: 12
Respuesta: Comprobar en una tabla u otra con if MySQL

en mi caso yo estoy desarrollando un sistema para zapaterias y ahy debemos llevar varios productos , colores , tallas etc , para manejar tengo una tabla que es donde solo estan ubicados los productos y el autoincrementable es mi id de articulo , en otra tabla tengo el inventario actual el cual sumo o resto segun las operaciones o movimientos de almacen , para hacer la consulta selecciono el producto y condiciono con un where algo asi

select t1.idart,t1.articulo,t1.color,t2.cantidad from articulos as t1 inner join stock as t2 on t1.idart = t2.idart where t1.articulo = 'jersey' and t2.cantidad > 0 ;

asi me retorna todos los articulos 'jersey' con cantidad mayo a cero
  #4 (permalink)  
Antiguo 09/05/2012, 16:02
 
Fecha de Ingreso: febrero-2002
Ubicación: Sabadell
Mensajes: 253
Antigüedad: 22 años, 1 mes
Puntos: 5
Respuesta: Comprobar en una tabla u otra con if MySQL

Cita:
Iniciado por quimfv Ver Mensaje
Me temo que tu diseño no este muy bien normalizado, muestranos los scripts de creación de las tablas para entender la situación....

Yo optaria por tener el stock de todos los productos en el mismo sitio, siguiendo tu ejemplo si un jersey lo tienes en varios colores lo guardas relacionandolo con los colores... es que si solo tienes un jersey este no tiene color... luego guarda ese color y ya podras guardar el stock de todos los productos de la misma forma y no tendras que usar ese IF que intentas usar.... Y si me apuras crea una categoria UNICO que te permita realcionar todos los productos que no tengan categorias....

Y por favor (des de Sabadell) usa el Highlight se lee mejor el codigo....
Lo malo es que no solo serían colores también serían tamaños y también sería diferentes precios y diferente stock con lo cual no es lo mismo tener de jersey sin color 0 en stock que tener 1 de jersey rojo xl y 0 de jersey rojo l ya que en el primer ejemplo no habría stock y no se mostraría el jersey en si, ni en la busqueda ni en ningún sitio pero en el segundo ejemplo si se mostraría el jersey ya que si que hay stock de un tipo de ese jersey, aunque si luego alguien selecciona la opción de jersey rojo xl en ese caso le saldría que no habría stock de dicho jersey.

Sorry por no poner en highlight el código y se me había olvidado cambiar mi ubicación de Terrassa a Sabadell :P que ya vivo aquí ;)

Las categorías no hay problema por ello siempre habrá categoría ahí he quitado una parte de código para intentar liarlo menos, pero he dejado la primera parte.

Igualmente quizás si que tengas razón y tenga que repensar toda la manera de hacer el tema de stock :/ a ver si se me ocurre alguna cosa aunque igualmente necesitaré el if por lo que te he comentado ya.

Y lo de pasarte los scripts de generación de las tablas ni idea de como hacerlo la verdad :/ uso el heidisql no se si sirve de algo, comentar que serían varias tablas:

- categorias (categorías del producto)
- productos (datos básicos del producto)
- r_productos_atributos (conjunto de atributos que pueda tener un producto)
- r_productos_complementarios (el conjunto entero de atributos y si el precio se incrementa, disminuye y el stock que hay)
- cc (carro de la compra)
- cc_desglose (desglose del carro de la compra)
  #5 (permalink)  
Antiguo 09/05/2012, 16:05
 
Fecha de Ingreso: febrero-2002
Ubicación: Sabadell
Mensajes: 253
Antigüedad: 22 años, 1 mes
Puntos: 5
Respuesta: Comprobar en una tabla u otra con if MySQL

Cita:
Iniciado por fahs82 Ver Mensaje
en mi caso yo estoy desarrollando un sistema para zapaterias y ahy debemos llevar varios productos , colores , tallas etc , para manejar tengo una tabla que es donde solo estan ubicados los productos y el autoincrementable es mi id de articulo , en otra tabla tengo el inventario actual el cual sumo o resto segun las operaciones o movimientos de almacen , para hacer la consulta selecciono el producto y condiciono con un where algo asi

select t1.idart,t1.articulo,t1.color,t2.cantidad from articulos as t1 inner join stock as t2 on t1.idart = t2.idart where t1.articulo = 'jersey' and t2.cantidad > 0 ;

asi me retorna todos los articulos 'jersey' con cantidad mayo a cero
Mmmm quizás pudiera hacer una especie de tabla de stock no se, le daré un par de vueltas a ver que saco en claro :) el problema es que en la tienda que estoy haciendo pueden poner cualquier tipo de atributo a los objetos con lo cual no tengo nada definido fijo, pero bueno gracias igualmente por la respuesta y miraré a ver que saco en claro ;)
  #6 (permalink)  
Antiguo 10/05/2012, 02:08
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Comprobar en una tabla u otra con if MySQL

Se tata de que el stock se guarde en todos los casos al mismo nivel

Producto + característica 1 + característica 2 +...+característica n -> stock

Si alguna característica es nula es nula pero el stock debe quedar al mismo nivel....

Si lo piensas bien con "agregates" podrás calcular el stock a cualquier nivel...

Jersey X Stock = Sumatoria de Stock de Jarsey X + características....

(Benvingut a aquesta part del Vallès)
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #7 (permalink)  
Antiguo 10/05/2012, 03:07
 
Fecha de Ingreso: febrero-2002
Ubicación: Sabadell
Mensajes: 253
Antigüedad: 22 años, 1 mes
Puntos: 5
Respuesta: Comprobar en una tabla u otra con if MySQL

Creo que estoy ofuscado pero no acabo de ver como hacerlo como tu dices, quizás porque nos falta información sobre el tema, ya que no es lo mismo para mi tener un producto único que un producto con varias opciones, pero como no consigo aclararme con rehacer de nuevo la bbdd he conseguido al final un sql que si me sirve, igualmente lo dejo aquí por si a alguien le puede servir:

Código SQL:
Ver original
  1. SELECT p.id_producto, p.id_tienda, pi.nombre, p.segunda_mano, pi.nombre_amigable, p.referencia, p.precio_con_iva, p.precio_rebajado, IF(precio_rebajado > 0, precio_rebajado, precio_con_iva) AS precio_final, p.stock, i.imagen_producto, ci.categoria
  2. FROM productos_idiomas pi, categorias c, categorias_idiomas ci, productos p
  3. LEFT JOIN imagenes_productos i ON p.id_producto = i.id_producto AND i.portada = 1
  4. WHERE p.activo = 1
  5.     AND p.id_producto = pi.id_producto
  6.     AND c.id_categoria = p.id_categoria
  7.     AND c.id_categoria = ci.id_categoria
  8.     AND IF((SELECT COUNT(id_producto_complementario) AS total FROM r_productos_complementarios rpc WHERE rpc.id_producto = p.id_producto) = 0,
  9.         IF(p.stock = -1,1,(SELECT (p.stock - COALESCE(SUM(cc_d.cantidad),0)) AS total_productos FROM cc_desglose cc_d, cc WHERE p.id_producto = cc_d.id_producto AND cc_d.id_cc = cc.id_cc AND cc.estado >= 2) > 0),
  10.         (SELECT (SELECT COALESCE(SUM(stock),0) AS total_stock FROM r_productos_complementarios rpc WHERE rpc.id_producto = 1) -
  11.         (SELECT COALESCE(SUM(cantidad),0) AS total_pedido FROM cc_desglose cc_d, cc WHERE cc_d.id_producto = 1 AND cc_d.id_cc = cc.id_cc AND cc.estado >= 2) AS total) >0)
  12.     AND c.id_categoria IN(57,60,61,62,63,70,71,72,126,127,129)
  13. GROUP BY p.id_producto ORDER BY pi.nombre

Al final lo he solucionado así, seguramente si le diera más vueltas podría volver a redefinir lo que son las tablas para hacerlo como comentas pero me siento espeso y creo que me va a costar más cambiar todo eso que haber hecho la query ;)

(Gracies ;) )

Última edición por LoBo2024; 10/05/2012 a las 04:44 Razón: Faltaba un parametro en la query.

Etiquetas: join, query, 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 10:00.