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 originalSELECT 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) AS total FROM r_productos_complementarios rpc WHERE rpc.id_producto = p.id_producto) = 0,
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),
(SELECT (SELECT COALESCE(SUM(stock),0) AS total_stock FROM r_productos_complementarios rpc WHERE rpc.id_producto = 1) -
(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)
AND c.id_categoria IN(57,60,61,62,63,70,71,72,126,127,129)
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 ;) )