问题标签 [user-variables]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
12587 浏览

mysql - 带有插入选择和用户变量的 MySQL 存储过程

问题: 我有一个 MySQL 存储过程,我想在每次调用该过程时将用户变量重置为 0,但该变量似乎在每次运行时都记住了它的值,我无法将其初始化为零。

详细信息:我有一个数据表(称为),我从中读取数据表,然后在另一个表(称为)data中以一对一的关联生成记录。results我在使用 Insert Select 语句的存储过程中执行此操作。我还使用了一个@mycount随每一行递增的用户变量。这是我的代码的简化版本:

分析:这几乎可以按预期工作,除非我@mycount每次运行时都需要将其重置为零并且SET上面的语句没有实现这一点。调试时,我可以看到最后一个值@mycount总是从存储过程的上一次运行中记住的。我也尝试在插入后将其设置为零。

笔记:

  1. 我正在使用一个@变量来增加和跟踪行号。也许这里还有另一种选择?
  2. 这个问题似乎与 Have 子句有关。当我运行一个类似但不同的查询时,没有使用 having 子句,变量重置没有问题。

问题:@mycount为什么每次运行前不能设置为零?如果它正在重置并且只是我的Having 子句导致意外计数,是否有更好的方法来重写我的SQL?

我希望有人遇到过类似的事情,因为这看起来很模糊。

0 投票
0 回答
57 浏览

mysql-5.5 - 设置 DATE 变量是 SQL

在下面的代码中使用 DATE() 变量我没有任何运气 - 在语法中出现错误。也尝试过 SELECT @mydate := DATE(NOW()) 但同样的错误。我正在使用 MySQL 5.5

0 投票
0 回答
151 浏览

mysql - MySQL 用户变量被覆盖

我有一个存储过程,它调用类似于以下结构的用户函数:

这里的问题是用户变量@running 在调用函数时被重置,这不是我想要的。理想情况下,它们具有完全不同的范围,并且希望使用局部变量,但我不知道是否可以像我在上面所做的那样在查询中增加局部变量。

这样的事情可能吗?

还是我只需要手动跟踪数据库中的所有用户变量并确保它们的名称是唯一的?例如@running1 和@running2

希望有更好的解决方案。

0 投票
1 回答
1647 浏览

mysql - 定义和使用带有子查询的变量?

我通常知道“涉及用户变量的表达式的求值顺序是未定义的”,所以我们不能在同一个select语句中安全地定义和使用变量。但是如果有子查询呢?例如,我有这样的事情:

有没有办法安全使用而不是重复子查询?如果是这样,我可以在函数中或第一次出现子查询(或其中之一)时这样做吗?(select @foo:=min(date_)from t where i.col1=col1)datediff


当然,我可以

然后做一些简单的后处理来得到datediff. 或者我可以编写两个单独的查询。但是这些并没有回答我的问题,即是否可以在查询和子查询中安全地定义和使用相同的变量。

0 投票
1 回答
2555 浏览

java - 重置/清除 MySQL 用户变量

我有一堆 MySQL 查询,它们使用临时表将复杂/昂贵的查询分成小块。

问题是,当我使用连接池时,即使关闭java.sql.Connection.

在执行所需的查询之前,我可以手动删除它们(drop temporary table x;),但这可能会因错误而发生。

有没有办法(JDBC/MySQL、API/配置)在不关闭数据库连接的情况下重置当前会话中创建的所有临时表(如您所知,我不是指java.sql.Connection.close()),这样我仍然可以使用优势提供连接池?

编辑:

似乎只有从 MySQL 5.7.3 版开始,他们才开始实施“重置连接”功能。(发布说明:https ://dev.mysql.com/doc/relnotes/mysql/5.7/en/news-5-7-3.html )但是,我暂时不会使用它,因为 5.7 版仍在运行开发版本。

0 投票
0 回答
27 浏览

mysql - 'IN' 的 where 子句中的用户变量

我在 MYSQL 中使用用户变量时遇到问题。这是我写的代码。这不会产生任何错误,但不会显示所需的结果。

但是当我在 MySQL 中运行它时,它不会返回所需的行。如果我在第二个 select 语句的 where 语句中复制用于定义用户变量的 select 语句,则会显示所需的结果。我的意思是,以下代码会产生所需的结果。

我第一次做错了什么?正如我所说,这些语句不会导致任何错误,但未显示所需的结果。

提前感谢您花时间帮助我。

干杯,

普拉塔梅什

0 投票
1 回答
91 浏览

mysql - 有什么方法可以在 MySQL 中运行等效的 for 循环?

我有一个基本上看起来像这样的表:

我正在尝试编写一个首先一次更新 1 行的查询,然后如果我感到贪婪,则更新所有行。我尝试了这样的用户定义变量:

但是这个查询失败了。为什么此查询失败,是否可以将其改进为类似于 for 循环的方式来更新表中的每个名称字段?对于后者,这样的事情可能吗?

0 投票
1 回答
43 浏览

mysql - 每个特定 ID 的 MySQL 用户定义变量

我已经创建了一个表并使用此查询插入了一些虚拟数据:

我想得到这样的表格结果:

我创建了一个这样的查询:

但是,saldo 历史的结果是针对所有 idproduct 计算的。

如何获取每个 idproduct 的“saldo”历史记录?

0 投票
1 回答
49 浏览

mysql - 多嵌套查询中的用户变量

我必须优化一个相当长的复杂查询,其中包含多个查询。有一个作为第三代 SELECT 重复多次的子查询:

这是完整查询的简化版本:

我想要做的是创建一个包含子查询的用户变量,以便为每条记录重新评估它,但每条记录只重新评估一次。它现在的工作方式,但需要 3 多分钟!我已经多次尝试了许多不同的选项,但看起来我的语法不正确。问题是用户变量子查询包含对 p 的引用。

谢谢,对不起我的英语不好。

0 投票
0 回答
96 浏览

mysql - MYSQL - 带有用户定义变量的选择子句在子查询中使用时不返回相同的结果

我在 MYSQL 下遇到了一些麻烦,希望在这里找到一些答案。

我有一些分数表,想查询排名在当前用户附近的用户。例如,如果当前用户排名#85,我想获取排名在 80 到 90 之间的用户。

这是我的分数表的摘录

当然,分数表不保存排名,它是我查询数据库时动态计算的。我有一个用户表,它给了我它的名字(以及一些其他信息,与我的问题无关):

我做了这个查询来排序分数并为每个用户分配一个排名,例如游戏“重力”:

这是在几个论坛上找到的标准技术:我将一个带有用户定义变量的临时表加入到分数中……然后加入用户表以获得友好名称。请注意,我实际上使用了 2 个“排名”变量,因为我希望相同的分数具有相同的排名(并且尝试次数不同的相同分数具有不同的排名)结果是好的:

但是,如果我将此查询用作子查询,则结果是完全随机的:

(XXX 是之前的选择,带有 rank 和 rank2)给了我:

所以结果仍然按分数和尝试顺序显示,但排名不再给出好结果。现在看来,升序遵循 uuID 升序的顺序

请记住,我这样做是因为我的目的是查询排名从 80 到 90 的玩家:

有人可以解释一下子查询会发生什么吗?也许有人想用另一种技术得到我的结果?

编辑:我更正了描述中的用户名列,我将准备一个 sqlfiddle