首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Laravel:用户定义的MySQL变量在Laravel中总是为空,但在MySQL CLI中不为空。

Laravel:用户定义的MySQL变量在Laravel中总是为空,但在MySQL CLI中不为空。
EN

Stack Overflow用户
提问于 2013-07-30 15:17:06
回答 2查看 1.2K关注 0票数 0

我有一个使用第一个select结果的嵌套select查询。在使用Sequel Pro的查询检查器进行测试时,我让查询工作得很好。它返回我想要的结果。当我将此查询传递给Laravel并使用简单的echo语句对其运行测试时,它会输出NULL

下面是我的PHP代码和查询:

代码语言:javascript
运行
复制
$crons = DB::select('
    SELECT @quiet_crons:=ROUND(SUM(TIME_TO_SEC(TIMEDIFF(`end_time`, `start_time`))/60/15))
    AS quiet_crons,
    FLOOR(SUM(TIME_TO_SEC(TIMEDIFF(TIME('24:00'), TIME(NOW())))/60/15-@quiet_crons))
    AS remaining_crons
    FROM `quiet_periods`
    WHERE `day` = DAYNAME(NOW())
');

这是控制台的输出:

代码语言:javascript
运行
复制
array(1) {
  [0]=>
  object(stdClass)#689 (2) {
    ["quiet_crons"]=>
    string(2) "24"
    ["remaining_crons"]=>
    NULL
  }
}

remaining_crons的结果不应该是NULL

请注意:我在这里看到了一篇关于Laravel中用户定义的MySQL变量的文章,我尝试了这个解决方案,但它并没有解决我的问题。这是我指的链接:在Laravel 3中用户定义的MySQL变量?

EN

回答 2

Stack Overflow用户

发布于 2013-07-30 15:43:03

MySQL用户定义的变量有点棘手。来自手册

作为一般规则,除了在SET语句中,不应该将值赋值给用户变量并读取相同语句中的值。例如,要增加一个变量,这是可以的: 设置为a= @a + 1; 对于其他语句,如SELECT,,您可能会得到预期的结果,但这并不一定是。在下面的语句中,您可能认为MySQL将首先计算@a,然后再执行赋值: ..。

但是,您可以不使用变量重写语句;

代码语言:javascript
运行
复制
SELECT quiet_crons, 
  FLOOR(SUM(TIME_TO_SEC(TIMEDIFF(TIME('24:00'), TIME(NOW())))/60/15-quiet_crons))
  AS remaining_crons
FROM (
  SELECT ROUND(SUM(TIME_TO_SEC(TIMEDIFF(`end_time`, `start_time`))/60/15))
  AS quiet_crons
  FROM `quiet_periods`
  WHERE `day` = DAYNAME(NOW())
) a;

一个要测试的SQfiddle

票数 2
EN

Stack Overflow用户

发布于 2013-07-30 15:48:31

好吧,这有点奇怪,但是一旦我在单独的查询中首先初始化了变量,结果的查询在Laravel中就能正常工作了。

下面是我在前面的代码中添加的代码:

代码语言:javascript
运行
复制
$crons = DB::select(DB::raw('
    SET @quiet_crons = 0;
'));

也许有人可以解释为什么在拉拉维尔这样的工作,而MySQL只是做了它的事情和工作无论如何.

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17950953

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档