easy-swoole / easyswoole

swoole,easyswoole,swoole framework
https://www.easyswoole.com/
Apache License 2.0
4.74k stars 511 forks source link

ORM groupby和count一起使用bug #508

Open SemiThin opened 2 years ago

SemiThin commented 2 years ago

图片

$model = new Wallet(); $res = $model->group('chain_id')->count(); var_dump($res); //var_dump($model->lastQuery()); var_dump($model->lastQuery()->getLastQuery());

SemiThin commented 2 years ago
$model = new Wallet();
$res = $model->group('chain_id')->sum('id');
var_dump($res);
var_dump($model->lastQuery()->getLastQuery());

今天用sum 也是有这样的bug 打印sql是多了个limit 1

好久了 望修复

@kiss291323003 @XueSiLf @Stitch-June @xuhaoxian @tioncico @evalor @davidzhang12138

XueSiLf commented 2 years ago

好的,马上修复

XueSiLf commented 2 years ago

这边测试发现你用法用错了,应该使用如下方式:

$model = new Wallet();
// $res = $model->field('count(`id`) as id_counts')->group('chain_id')->all();
$res = $model->field('count(`id`)')->group('chain_id')->all();
$isReturnCollection = \EasySwoole\EasySwoole\Config::getInstance()->getConf('MYSQL.returnCollection');
$ret = [];
if ($isReturnCollection) {
    $ret = $res->toArray(false, false);
} else {
    if (!empty($res)) {
        foreach ($res as $key => $value) {
            $ret[] = $value->toArray(false, false);
        }
    }
}
var_dump($model->lastQuery()->getLastQuery());
var_dump($ret);
XueSiLf commented 2 years ago

在tp情况下运行您提供的代码也是带有 limit 1 的。

$model = new Wallet();
// $res = $model->group('chain_id')->field('count(`id`)')->select();
$res = $model->group('chain_id')->count();
echo '<pre>';
var_dump($res);
// var_dump(collection($res)->toArray());
var_dump($model->getLastSql());

tp下运行结果:

int(3)
string(110) "SELECT COUNT(*) AS tp_count FROM ( SELECT count(*) FROM `wallet` GROUP BY `chain_id` ) `_group_count_` LIMIT 1"