gpt4 book ai didi

php - mysql忽略where语句

转载 作者:行者123 更新时间:2023-11-29 04:24:36 24 4
gpt4 key购买 nike

我使用此查询获取昨天的所有销售额。将其导出到某个地方。
由于有很多已取消、待付款、正在处理等,所以我想只导出已完成的。

但不知何故,mysql 忽略了拳头位置限制。我总是得到所有的销售。我写什么都没关系。它只需要是昨天使用的状态。

$sql = '

SELECT
sales_flat_order_grid.entity_id,
sales_flat_order_grid.increment_id AS increment_id,
sales_flat_order_grid.quote_id AS quote_id,
sales_flat_order_grid.store_name AS store_name,
sales_flat_order_grid.created_at AS created_at,
sales_flat_order_grid.billing_name AS billing_name,
sales_flat_order_grid.payment_method AS payment_method,
sales_flat_order_grid.grand_total AS grand_total,
sales_order_status.label AS status,
sales_flat_order_item.sku AS sku,
sales_flat_order_item.name AS name,
sales_flat_order_item.price_incl_tax AS price_incl_tax,
sales_flat_order_item.product_options AS product_options,
sales_flat_order_payment.additional_information AS additional_information

FROM
sales_flat_order_grid,
sales_order_status,
sales_flat_order_item,
sales_flat_order_payment

WHERE
sales_flat_order_grid.status = "Complete"
AND sales_flat_order_grid.entity_id = sales_flat_order_item.order_id
AND sales_flat_order_grid.entity_id = sales_flat_order_payment.entity_id
AND sales_flat_order_grid.created_at >= "' . $date . ' 00:00:00"
AND sales_flat_order_grid.created_at <= "' . $date . ' 23:59:59"

ORDER BY
sales_flat_order_grid.entity_id DESC

';

最佳答案

当您编写这样的查询时,您正在为自己设置灾难:

FROM
sales_flat_order_grid,
sales_order_status,
sales_flat_order_item,
sales_flat_order_payment

WHERE
sales_flat_order_grid.status = "Complete"
AND sales_flat_order_grid.entity_id = sales_flat_order_item.order_id
AND sales_flat_order_grid.entity_id = sales_flat_order_payment.entity_id
AND sales_flat_order_grid.created_at >= "' . $date . ' 00:00:00"
AND sales_flat_order_grid.created_at <= "' . $date . ' 23:59:59"

为什么?因为很容易错过 JOIN 条件。

相反,请使用以下语法:

FROM
sales_flat_order_grid
INNER JOIN sales_order_status ON ....
INNER JOIN sales_flat_order_item ON sales_flat_order_grid.entity_id = sales_flat_order_item.order_id
INNER JOIN sales_flat_order_payment ON sales_flat_order_grid.entity_id = sales_flat_order_payment.entity_id

WHERE
sales_flat_order_grid.status = "Complete"
AND sales_flat_order_grid.created_at >= "' . $date . ' 00:00:00"
AND sales_flat_order_grid.created_at <= "' . $date . ' 23:59:59"

看到那里的....了吗?它缺少连接条件,因此它选择了一个笛卡尔积。添加缺失的连接条件,您的结果应该更符合您的预期。

关于php - mysql忽略where语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14506094/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com