2012-09-23 26 views
8

que tiene dos tablas: ITEMS con cantidades y UNIT_PRICE (id | nombre | order_id | qt | UNIT_PRICE) y mesa ORDERS.MySQL UPDATE con SELECT SUM de diferentes mesa de

Quiero UPDATE tabla orders y lugar en orders.total_price sum of multiplications qt*unit_price para los mismos pedidos para obtener el precio total del pedido.

La consulta SELECT en la tabla de artículos es muy simple y funciona sumas de donaciones por todos los materiales dentro de la misma order_id:

SELECT SUM(items.qt*items.unit_price) from items GROUP by items.order_id 

pero no puedo insertar este valor en mi mesa ORDERS. No podía hacer este trabajo:

UPDATE orders, items SET orders.total_price = (SELECT SUM(items.qt*items.unit_price) 
FROM items GROUP BY items.order_id) WHERE orders.id = items.order_id 

vuelve "Subquery returns more than 1 row"

me encontré con una pregunta muy similar here pero la respuesta no funcionó para mí también:

UPDATE orders SET orders.t_price = (SELECT SUM(items.qt*items.unit_price) from items WHERE orders.id = items.order_id) 
+0

por favor muestre su consulta completa de lo que está haciendo como mysql_query ("consulta") –

+1

Lo estoy haciendo por ahora en phpmyadmin así que la segunda consulta anterior es la consulta real que trato: "ACTUALIZAR pedidos, artículos SET orders.total_price = (SELECT SUM (items.qt * items.unit_price) FROM items GROUP BY items.order_id) WHERE orders.id = items.order_id " – Milosz

Respuesta

13

Puede UPDATE con JOIN ing las dos tablas:

UPDATE Orders o 
INNER JOIN 
(
    SELECT order_id, SUM(qt * unit_price) 'sumu' 
    FROM items 
    GROUP BY order_id 
) i ON o.id = i.order_id 
SET o.total_price = i.sumu 
[WHERE predicate] 
+0

Gracias. ¿Qué debería decir [el predicado WHERE]? Sin eso afecta a 0 filas y con "WHERE o.id = i.order_id" también afecta a 0 filas. – Milosz

+0

@ user1692064 puede usar la cláusula 'WHERE' para proporcionar una condición adicional para actualizar la columna que especificó solo si esta condición era verdadera, tenga en cuenta que esta cláusula es opcional y escríbala si la necesita. También hubo 0 filas afectadas porque podría no haber ningún campo que satisfaga la condición de unión que es 'ON o.id = i.order_id' –

+0

Lo siento, fue mi desconocimiento de que mysql en phpmyadmin ignora en los" valores afectados "esos registros que tienen el mismo valor ya Debo haber tenido valores correctos en todos los registros antes, jugando con varias consultas diferentes. Gracias. – Milosz