我有一个相当简单的查询,试图显示订阅的电子邮件地址的数量以及取消订阅的数字,按客户分组.
查询:
SELECT
client_id,
COUNT(CASE WHEN subscribed = 1 THEN subscribed END) AS subs,
COUNT(CASE WHEN subscribed = 0 THEN subscribed END) AS unsubs
FROM
contacts_emailAddresses
LEFT JOIN contacts ON contacts.id = contacts_emailAddresses.contact_id
GROUP BY
client_id
Run Code Online (Sandbox Code Playgroud)
下面是相关表格的模式.contacts_emailAddresses是联系人(具有client_id)和emailAddresses(在此查询中实际未使用)之间的联结表.
CREATE TABLE `contacts` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`firstname` varchar(255) NOT NULL DEFAULT '',
`middlename` varchar(255) NOT NULL DEFAULT '',
`lastname` varchar(255) NOT NULL DEFAULT '',
`gender` varchar(5) DEFAULT NULL,
`client_id` mediumint(10) unsigned DEFAULT NULL,
`datasource` varchar(10) DEFAULT NULL,
`external_id` int(10) …Run Code Online (Sandbox Code Playgroud) 我如何在Loopback模型中使用聚合函数?如果我有一个由mysql数据库支持的模型,我可以让Model1与Model2具有hasMany关系(具有给定的数字属性),并且在Model1中有一个属性可以从Model2中获取该字段的SUM吗?
{
"Model1" : {
"Relations" : {
"model2s" : {
"type": "hasMany",
"model": "Model2",
"foreignKey": "model1Id"
}
},
"Properties" : {
"total" : {
"type": "Number"
[SUM of Model2 'amount' field]
}
}
},
"Model2" : {
"Relations" : {
"model1s" : {
"type": "belongsTo",
"model": "Model1",
"foreignKey": "model1Id"
}
},
"Properties" : {
"amount" : {
"type": "Number"
}
}
}
}
在另一个问题上,将条件放入模型的正确方法是什么,以便getter返回的值取决于某个表达式?我想从关系中返回一个值(如果存在),否则返回主模型上存在的值.
我试过这个(伪代码):
module.exports = function(MyModel) {
MyModel.on('attached', function() {
var app = MyModel.app;
MyModel.getter['total'] = function() … 我试图在一些大型(大约1000万,最差情况下没有搜索过滤器)记录集上使用ZF2 Paginator.我的表格是InnoDB格式,据我所知,这些格式并没有作为元数据的一部分.
我意识到我可以扩展Zend\Paginator\Adapter\DbSelect类并实现我自己的count()方法,该方法使用我手动存储在另一个表中的计数数据,但我不确定如何存储所有可能排列的计数可能会进行的搜索.
默认的ZF2 DbSelect适配器使用此方法:
<?php
public function count()
{
if ($this->rowCount !== null) {
return $this->rowCount;
}
$select = clone $this->select;
$select->reset(Select::LIMIT);
$select->reset(Select::OFFSET);
$select->reset(Select::ORDER);
$countSelect = new Select;
$countSelect->columns(array('c' => new Expression('COUNT(1)')));
$countSelect->from(array('original_select' => $select));
$statement = $this->sql->prepareStatementForSqlObject($countSelect);
$result = $statement->execute();
$row = $result->current();
$this->rowCount = $row['c'];
return $this->rowCount;
}
?>
Run Code Online (Sandbox Code Playgroud)
这是一个方法为我生成的一个非常简单的示例查询:
SELECT
COUNT(1) AS `c`
FROM
(
SELECT
`contacts`.`id` AS `id`,
`contacts`.`firstname` AS `firstname`,
`contacts`.`middlename` AS `middlename`,
`contacts`.`lastname` AS `lastname`,
`contacts`.`gender` AS `gender`
FROM
`contacts`
WHERE …Run Code Online (Sandbox Code Playgroud)