Yii2: Как написать отдельный sql-запрос?

Хотите реализовать следующие SQL-запросы в YII 2, но без успеха -

SELECT  count(DISTINCT(company_name)) FROM clients

Это должно дать общее количество уникальных фирменных наименований

и

SELECT  (DISTINCT(company_name,client_code)) FROM clients

и это должно отображаться имя_компании с кодом клиента и id(PK)

как добиться этого?

Ответы

Ответ 1

Отвечая на мой вопрос, я получил следующие рабочие решения:

Получено количество уникальных имен компаний,

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

И список отдельных company_name и client_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>';
            }
        }

Ответ 2

Попробуйте это

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

Не протестировано!

Ответ 3

Я надеюсь, что этот пример полезен для вас

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

для доступа к данным

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

Ответ 4

Все работало нормально

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