gpt4 book ai didi

mysql - 准备语句语法错误

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

销售数据库中有 3 个表:orders(order_id, user_id, item_id, quantity, date), users(user_id, name, discount_percent) 和 items(item_id, name, type, price)。我正在尝试生成按天分组的用户月度利润报告,必须看起来像这样(片段):

|-------user--------|----------day_1--------|---------day_2---------|---------day_3---------| etc. |

|-user_name_1-|-sum_of_expenses-|-sum_of_expenses-|-sum_of_expenses-| etc. |

|-user_name_2-|-sum_of_expenses-|-sum_of_expenses-|-sum_of_expenses-| etc. |

我使用了以下准备好的语句来实现这一点:

SELECT
GROUP_CONCAT(DISTINCT CONCAT('SUM(IF(DATE(orders.date) = \'',
DATE(orders.date),
'\', orders.quantity * items.price * (1 - users.discount_percent / 100), 0)) AS ',
DATE(orders.date))
ORDER BY DATE(orders.date))
INTO @sql FROM
orders;
SET @sql = CONCAT('SELECT users.name, ', @sql, ' FROM
users
INNER JOIN
orders ON users.user_id = orders.user_id
INNER JOIN
items ON orders.item_id = items.item_id
GROUP BY users.name
ORDER BY users.user_id');

PREPARE statement FROM @sql;
EXECUTE statement;
DEALLOCATE PREPARE statement;

出于某种原因,它给了我一个警告:

1 row(s) affected, 1 warning(s): 1260 Row 8 was cut by GROUP_CONCAT()

然后是一个错误:

Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '2015-01-01,SUM(IF(DATE(orders.date) = '2015-01-02', orders.quantity * items.pric' at line 1

我认为这与日期或引号的格式有关,但我为修复它而键入的所有内容都失败了。

我也在尝试弄清楚如何通过 php 的 mysqli prepare() 方法实现这个复杂的语句。

最佳答案

对于第一个警告,MySql group_concat 函数默认限制为 1024。

您可以在查询之前增加限制,方法是:

SET @@group_concat_max_len = 32000;

关于mysql - 准备语句语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45538335/

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