Yii2:如何编写不同的 SQL 查询?

Posted

技术标签:

【中文标题】Yii2:如何编写不同的 SQL 查询?【英文标题】:Yii2 : How to write distinct SQL query? 【发布时间】:2015-09-30 10:20:20 【问题描述】:

我想在 Yii 2 中实现以下 SQL 查询,但没有成功。

这应该给出唯一公司名称的总数:

SELECT count(DISTINCT(company_name)) FROM clients

这应该显示company_nameclient codeid(PK)

SELECT (DISTINCT(company_name,client_code)) FROM clients

如何做到这一点?

【问题讨论】:

您想要返回一个包含两列的表:company_name 和 client_code;只有独特的价值?联合将创建一个包含名称和 ID 组合的列。我怀疑这不是你想要的。你就不能:select distinct company_name, client_code from clients 首先我想要所有唯一 comapny_name 的计数,然后在第二个查询中我想列出所有唯一 company_nameclient_code 第一个查询是否有效(即count(distinct(company_name)))?语法对我来说很好。 获得了唯一公司名称的计数,但不知道如何列出这些.. 你能试试select distinct company_name, client_code from clients吗? 【参考方案1】:

试试这个:

$total = YourModel::find()->select('company_name')->distinct()->count();

在搜索模型中:

public function search($params)

    $query = YourModel::find()->select('company_name')->distinct();
    // or
    $query = YourModel::find()->select(['company_name', 'client_code'])->distinct();

    $query->orderBy('id desc');

    $dataProvider = new ActiveDataProvider([
        'query' => $query,
    ]);
    // ...

【讨论】:

【参考方案2】:

回答我自己的问题,我得到了以下可行的解决方案:

得到唯一company_name 的计数:

$my = (new yii\db\Query())
    ->select(['company_name',])
    ->from('create_client')
    ->distinct()
    ->count();
echo $my;

不同company_nameclient_code的列表:

$query = new yii\db\Query();
$data = $query->select(['company_name','client_code'])
    ->from('create_client')
    ->distinct()
    ->all();
if ($data) 
    foreach ($data as $row) 
        echo 'company_name: ' . $row['company_name'] . ' client_code: ' . $row['client_code'] . '<br>';
    

【讨论】:

【参考方案3】:

我希望这个示例对你有用

 $names = Yii::$app->db->createCommand('SELECT  count(DISTINCT(company_name)) as name FROM clients')
    ->queryAll();

用于访问数据

foreach ($names as $name)
    echo $name['name'];

【讨论】:

我发布了一个新答案。我希望这对你来说是正确的。 我得到了解决方案,更新了问题感谢您的帮助.. :) 改变访问db对象的方式,是db而不是$db,相关yiiframework.com/doc/guide/2.0/en/… (Creating DB Connections)【参考方案4】:

一切正常

return Clients::find()->count('DISTINCT(company_name)');

【讨论】:

以上是关于Yii2:如何编写不同的 SQL 查询?的主要内容,如果未能解决你的问题,请参考以下文章

如何编写一个显示仅分配给登录用户的列表的 SQL 查询?

在 Yii2 中执行原始 SQL 查询?

Yii2 where()变量条件

Yii2:具有不同查询的 ActiveRecord

如何使用sql编写查询语句 用于查询学生的 各科成绩

如何将原始 SQL 转换为 Yii2,如查找查询