web-dev-qa-db-ja.com

Yii2:個別のSQLクエリを記述する方法

次のSQLクエリをYii 2で実装しますが、成功しません。

これにより、一意の会社名の総数が得られます。

_SELECT count(DISTINCT(company_name)) FROM clients
_

そして、これは_company_name_と_client code_およびid(PK)を表示するはずです:

_SELECT (DISTINCT(company_name,client_code)) FROM clients
_

これを達成する方法は?

20
JKLM

私自身の質問に答えると、次の実用的なソリューションが得られました:

一意の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>';
    }
}
9
JKLM

これを試して:

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

このサンプルがお役に立てば幸いです

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

データにアクセスするため

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

すべてうまくいった

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