Ver Mensaje Individual
  #8 (permalink)  
Antiguo 22/05/2009, 10:14
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Liado con SELECT.... JOIN....

Cita:
la cual me devuelve las categorias con y sin productos, peeeero (siempre hay un pero), las categorias que no tienen productos, me las devuelve con un valor de 'productos' erroneo, en lugar de 0 me devuelve un 1, y me he asegurado que esa categoria no tenga productos relacionados.
Eso es porque estás contando los registros de categorías, asumiendo que son productos y no es así. En ese caso tienes que determinar si son productos o NULL.
El tema se resuelve insertando en una subconsulta lo que estás haciendo ya, pero en vez de usar COUNT, hay que usar SUM():
Código sql:
Ver original
  1. SELECT
  2.    campos,
  3.    SUM(productos) Productos
  4. FROM
  5.    (SELECT
  6.       tbl_categorias . * ,
  7.      IF (P.id_categoria IS NULL, 0, 1) productos
  8.    FROM tbl_categorias C
  9.    LEFT JOIN tbl_productos P ON C.id = P.id_categoria) T1
  10. GROUP BY id
  11. ORDER BY id ASC
  12. LIMIT 0 , 30

Detalles: Este método requiere si o si que se indique por su nombre los campos que se desean recuperar. No funciona de otra forma y no se puede hacer que funcione de otro modo si lo que quieres es que te devuelva cero (0) en esa columna.
Tip: Si quieres que se ordene en forma ascendente no es necesario quee pongas ASC, porque ese es el modo por default. Es redundante. Tienes que ponerlo si previo hay otro campo puesto como DESC.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)