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_name
和client code
和id(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_name 和 client_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_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>';
【讨论】:
【参考方案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 查询?的主要内容,如果未能解决你的问题,请参考以下文章