Ver Mensaje Individual
  #6 (permalink)  
Antiguo 09/02/2014, 14:38
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: Consulta múltiple mysql

Cuando quieres hacer algún cálculo sobre un determinado ítem debes usar obligatoriamente GROUP BY para agrupar sobre la columna que discrimina el elemento a procesar, aún cuando vayas a obtener lo correspondiente a un único tipo.
Esto último siempre que quieras obtener tambien un identificador. Es decir: Si tienes al menos dos columnas invocadas, la que se calcula y otra más no calculada, obligatoriamente debes usar GROUP BY.

Si deseas datos sobre el mismo item:
SELECT
Código MySQL:
Ver original
  1. I.order_item_name,
  2.     I.created_by,
  3.     I.virtuemart_product_id,
  4.     C.virtuemart_category_id
  5.  SUM(I.product_quantity) totalProducto
  6. FROM `#__virtuemart_order_items` I INNER JOIN `#__virtuemart_product_categories` C
  7.     ON I.virtuemart_product_id = C.virtuemart_product_id
  8.     I.created_by =$tuid
  9.     AND C.virtuemart_product_id = 7
  10. GROUP BY I.virtuemart_product_id;

Si sólo quieres el total:
Código MySQL:
Ver original
  1.  SUM(I.product_quantity) totalProducto
  2. FROM `#__virtuemart_order_items` I INNER JOIN `#__virtuemart_product_categories` C
  3.     ON I.virtuemart_product_id = C.virtuemart_product_id
  4.     I.created_by =$tuid
  5.     AND C.virtuemart_product_id = 7;
La segunda no requiere el GROUP BY porque operas sobre una única columna, por lo que siempre devolverá un único dato. Pero en la anterior devuelve además otros datos relacionados, por lo que si o si debe ir.

Notas:
1) Esta sintaxis del GROUP BY, con un único campo indicado, es exclusiva de MySQL. En los demás DBMS es obligatorio poner todos los campos del SELECT no afectados por una función agrupada.
2) Lo que tienes debe estar devolviendote un error sintáctico porque tienes un cierre de sentencia mal colocado:
Código SQL:
Ver original
  1. WHERE  I.created_by =$tuid; -- < Este punto y coma luego de la variable es interpretado por MySQL como cierre de sentencia, lo que genera un error de sintaxis
  2. AND C.virtuemart_product_id = 7
3) No te lo dije en el post anterior, pero es inconveniente el uso de ciertos caracteres en los nombres de objetos de base de datos. El numeral (#) se usa para comentarios entre líneas, lo que en MySQL generaría errores si no lo pones entre acentos agudos (`).
Procura no usar caracteres especiales ni palabras reservadas. Te ahorrarás problemas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)