php - INSERT SELECT FROM WHERE generating a row for every occurence of WHERE
I have two sales_orders and sales_invoices. My goal is to copy data from sales_orders to sales_invoices on the press of a button.
I am calling a function in PHP from a submit in a form that passes the WHERE variable (sales_order_id). I have confirmed the variable is being called correctly and when I do this statement direct in mysql it succeeds just as expected, but when I run it in my function it creates a row for every occurence of the sales_order_id (50 rows, as opposed to a single row). I am using 12345 for my sales_order_id.
What am I doing wrong?
Here is my query:
INSERT into sales_invoices(si_customer_id, si_purchase_order_number, ref, si_gross_total)
select so_customer_id, so_purchase_order_number, sales_order_id, sum(so_gross_total + so_vat_adjustment_value) as gross_total
from sales_orders where sales_order_id = 12345
and here is my PHP code
function create_invoice(){
if(isset($_POST['create_invoice'])){
$sales_order_id = escape_string($_POST['sales_order_id']);
$query = query("INSERT into sales_invoices(si_customer_id, si_purchase_order_number, ref, si_gross_total)
select so_customer_id, so_purchase_order_number, sales_order_id, sum(so_gross_total + so_vat_adjustment_value) as gross_total
from sales_orders where sales_order_id = $sales_order_id");
confirm($query);
}
}
All the varaibles work as they should, tested by echoing them out... sales_order_id is a hidden input on the form and is being pulled through as it should.
Answer
Solution:
Thanks to everybody for their input. By changing the code to this
if(isset($_POST['create_invoice']) && $sales_order_id == $_POST['sales_order_id']){
it works as it should.
Thanks too, for the tip re. "Remove sum because it is used for vertical addition like summing the whole column."
Source