php Yii2:如何编写独特的SQL查询?

3okqufwl  于 2022-12-02  发布在  PHP
关注(0)|答案(5)|浏览(156)

我想在Yii 2中实现以下SQL查询,但没有成功。
这应给予唯一公司名称的总数:

SELECT count(DISTINCT(company_name)) FROM clients

这应该会显示company_nameclient codeid(PK)

SELECT (DISTINCT(company_name,client_code)) FROM clients

如何做到这一点?

lg40wkob

lg40wkob1#

试试这个:

$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,
    ]);
    // ...
}
wlp8pajw

wlp8pajw2#

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

已取得唯一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>';
    }
}
b09cbbtk

b09cbbtk3#

一切正常

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

eufgjt7s4#

我希望这个样品对你有用

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

用于访问数据

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

cwxwcias5#

对于那些需要在具有别名的列和其他列上选择不同的列的用户,可以使用以下解决方案:

$modelClass::find()
    ->select(new Expression(
        "distinct on ('col1') col1, col2, test as col3, 'hardCodeValue' as col4"
    ))

注意:对于PGSQL,在查询中使用什么引号很重要。

相关问题