gpt4 book ai didi

mysql - 相同的 SQL 代码在不同的 MySQL 客户端上返回不同的结果集

转载 作者:行者123 更新时间:2023-11-29 01:03:26 25 4
gpt4 key购买 nike

我有一些 SQL 代码返回了两个 MySQL 客户端(即 MySQL Workbench 和 Sequel Pro)中预期的结果集。但是,当我将 SQL 代码放入存储过程 (SP) 时,它会在 Sequel Pro 上返回一行结果集(与以前不同)。 SP 在 MySQL Workbench 上仍然运行良好(正确的结果集)。我不明白为什么。相同的 SQL 代码,相同的数据库,但两个不同的 SQL 客户端上的结果集不同。

我的最终目标是从 PHP 文件调用此 SP。当我这样做时,我得到的结果与从 Sequel Pro 得到的结果相同。您认为可能是什么问题?

这是我的 SQL 代码:

SET @prev_val:=24;
SET @num := 0;
SELECT @prev_date := DATE(MAX(logDate)) FROM EmotionsDB.`Log`;
SELECT @prev_date_outerLoop := DATE(MAX(logDate)) FROM EmotionsDB.`Log`;

SELECT dateOfEmotion, emotionID
FROM
(
SELECT dateOfEmotion, diffHour, emotionID,
@num := IF(dateOfEmotion = @prev_date_outerLoop, @num + 1, 1) AS row_number,
@prev_date_outerLoop := dateOfEmotion AS previousDate
FROM
(
SELECT DATE(logDate) AS dateOfEmotion, TIME(logDate) AS timeOfEmotion, emotionID,
IF(DATE(logDate) = @prev_date, @prev_val - HOUR(logDate), 24 - HOUR(logDate)) AS diffHour,
@prev_val:=HOUR(logDate) AS previousHour,
@prev_date:=DATE(logDate) AS previousDate
FROM EmotionsDB.Log
WHERE DATE(logDate) <> DATE(CURDATE()) AND MONTH(logDate) = MONTH(CURDATE())
ORDER BY DATE(logDate) DESC, TIME(logDate) DESC
) AS InnerSubQuery
ORDER BY dateOfEmotion DESC, diffHour DESC
) AS OuterSubQuery
WHERE row_number = 1;

这是我从 MySQL Workbench 获得的正确结果集(两列,“dateOfEmotion”和“emotionID”):

2014-02-17  6
2014-02-14 2
2014-02-13 2
2014-02-07 5
2014-02-06 2
2014-02-05 0
2014-02-02 3

这是我从 Sequel Pro 中的 SP 得到的错误结果集(只有一列的列名为“@prev_date := DATE(MAX(logDate))”):

2014-02-17

提前致谢。

最佳答案

似乎 SequelPro 正在返回临时结果集。您可以将变量赋值更改为 SELECT .. INTO,如下所示:

SELECT DATE(MAX(logDate)) INTO @prev_date FROM EmotionsDB.`Log`;
SELECT DATE(MAX(logDate)) INTO @prev_date_outerLoop FROM EmotionsDB.`Log`;

抑制中间结果集。

关于mysql - 相同的 SQL 代码在不同的 MySQL 客户端上返回不同的结果集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21925033/

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