首页 > 解决方案 > 如果在选择查询中使用别名,如何计算所有记录?

问题描述

我将 Sphinx 与 Yii2 一起使用,并且需要通过 JSON 字段过滤器进行查询。

$query = new \yii\sphinx\Query();
$query->from('announcements');
$query->addSelect("*");
$query->addSelect(new Expression("IN(filters['color'], 'blue', 'red', 'green') AS f_color"));
$query->where("is_active = 1");
$query->andWhere("f_color = 1");
$announces = $query->all();

我的 Sphinx 索引中有 JSON 字段filters。例如:

[filters] => {"brand":"Toyota","model":"Prius","color":"red","price":"12000"... etc]

它工作正常。但是现在我需要进行分页...之前尝试统计记录时出现问题$query->all()

$count = $query->count(); // Return error "no such filter attribute 'f_color'"

生成的查询是:

SELECT COUNT(*) FROM announcements WHERE ( is_active = 1 ) AND ( f_color = 1 )

标签: yii2sphinx

解决方案


count()默认情况下,将select部分替换为*,这是定义别名的位置,因此会出现错误。

有不同的方法可以实现它,例如:

由于您想进行分页,因此我将使用第一个示例。


推荐阅读