【问题标题】:findBySql in Yii2 not return expected resultsetYii2中的findBySql不返回预期的结果集
【发布时间】:2016-10-09 12:12:39
【问题描述】:

我正在使用 Yii2,对于我的数据表,我需要分类数据并限制每个类别的数据,为了获得结果,我使用了 findBySql(),但它总是从该模型返回完整的结果集。

它工作得很好,但我想将它与模型一起使用,这样我就可以拥有实例

我只想让下面的查询给我一个给定 SQL 语句的 yii\db\ActiveQuery 实例。

我还需要实例,所以不需要简单的数组。

我希望每个类别 ID 或 ID 最多包含 10 行的结果。

这里是sql

$sql = 'SELECT *
FROM (
SELECT t.* , @currcount := IF( @currvalue = t.id, @currcount +1, 1 ) AS rank, @currvalue := t.id AS whatever
FROM test t
ORDER BY t.id ASC
) AS whatever';

$modelTest = Test::findBySql($sql)->all();

【问题讨论】:

  • 乍一看,我觉得从这种类型的选择中获得模型校正很奇怪..但无论如何..请解释什么是问题..你有一个错误.?你有错误的结果? ...你没有结果?看过 $modelTest 的内容了吗?
  • 它给了我 sql 的 PDO 异常。但在 phpmyadmin 中工作正常。所以只是 Yii findBySql() 的问题。
  • 可以在 phpadmin 中工作的明显 .. 你是一个 shell sql 命令 .. 但这不像在 yii2 中那样工作 .. 请显示你在 yii2 中的确切错误

标签: mysql yii yii2 yii2-advanced-app


【解决方案1】:

请使用数据库访问对象 示例:

$sql = 'SELECT *
FROM (
SELECT t.* , @currcount := IF( @currvalue = t.id, @currcount +1, 1 ) AS rank, @currvalue := t.id AS whatever
FROM test t
ORDER BY t.id ASC
) AS whatever';

$data= Yii::$app->db->createCommand($sql)
            ->queryAll();

【讨论】:

  • 它给出了错误的排名,每一行都有排名1,而不是添加+1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-20
  • 2016-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-25
  • 1970-01-01
相关资源
最近更新 更多