mysql ssh控制台正确运行子查询,但mysqli为子查询列返回零

gopyfrb3  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(282)

我很犹豫是否要发布整个查询,但也许这对于我的变量赋值是必要的。简而言之,第十列是一个子查询,应该返回另一个表中某个内容的出现次数。
sqlfiddle:http://sqlfiddle.com/#!9/3718e/2号
用户id 366 是一个测试生产帐户。这通常是动态绑定的 ? 准备好的变量。用户id 366 应该返回两行。这九列对于这个问题并不重要,但是第十列(子查询)应该有 1 以及 0 分别在第一行和第二行。这适用于到mysql的ssh连接。然而,php的mysqli甚至phpmyadmin都返回了 0 以及 0 分别。我已经对php进行了沙盒处理,所以我相信错误就在sql中。
ssh的正确输出示例(忽略前9列): +--------+ | guests | +--------+ | 0 | | 1 | +--------+ mysqli只返回0。其他列不受影响,ssh/mysqli都同意并正确返回。如果需要更多的背景,请告诉我。
谢谢您。
SELECT tickets.id, @formal_id:=schedule.id as 'formal_id', schedule.name, schedule.date, schedule.colour, @li_price:=schedule.livers_in_price as 'li', @lo_price:=schedule.livers_out_price as 'lo', @gu_price:=schedule.guests_price as 'gu', tickets.for_sale as 'for_sale', @guest:=( SELECT COUNT(*) FROM billing WHERE guest = 1 AND user_id = @user_id AND formal_id = @formal_id ) AS 'guests' FROM tickets JOIN user ON tickets.user_id = user.user_id JOIN schedule ON tickets.formal_id = schedule.id JOIN billing ON tickets.formal_id = billing.formal_id WHERE user.user_id = 366 AND schedule.date > NOW() GROUP BY tickets.id;

wfsdck30

wfsdck301#

在执行联接时,如果不指定变量的表源,则可能会得到意外的结果。使用 table.column 语法可以帮你省去很多痛苦。
在这种情况下 AND user_id = tickets.user_id 但我无法解释你的测试结果和我的不一致。

相关问题