使用PHP5.6,我尝试从MySQL (PDO)运行一个MySQL查询,但结果与从PHP运行时不同,所以我最终放弃了,改为编写一个存储过程,我再次从PHP调用它。然而,我得到了相同的无效结果:-(为了证明结果是不同的,我修改了代码,只返回记录数。存储过程可以在这里看到...
CREATE PROCEDURE `test`()
BEGIN
SELECT count(*)
FROM
(
SELECT id, date,
@var_num := if(@var_id = id, @var_num + 1, 1) as row_number,
@var_id := id
FROM `data`
GROUP BY id, date
HAVING row_number <= 2
ORDER BY id DESC, date DESC
) s2
ORDER BY id ASC, date DESC;
END当我从MYSQL Workbench运行存储过程时,它返回7,328,这是正确的,但是当我从PHP运行它时使用...
$pdo = $this->database->getPdo();
$stmt = $pdo->prepare('CALL test()');
$stmt->execute();
$data = $stmt->fetchAll();结果是4925479。如果我试图返回实际的数据,那么它就会耗尽内存!我假设存储过程无论从何处调用都会以相同的方式运行,我做错了什么?
发布于 2021-05-20 16:49:42
尽管存储过程可能不完整,但我将在此处显示更新后的过程,这对我来说是有效的。希望这能让其他人免于浪费时间:-(
CREATE PROCEDURE `test`()
BEGIN
SELECT count(*)
FROM
(
SELECT id, date,
@var_num := if(@var_id = id, @var_num + 1, 1) as row_number,
@var_id := id
FROM `data`
CROSS JOIN (select @var_num := 0, @var_id := 0) cj
GROUP BY id, date
HAVING row_number <= 2
ORDER BY id DESC, date DESC
) s2
ORDER BY id ASC, date DESC;
ENDhttps://stackoverflow.com/questions/67607278
复制相似问题