小编jcq*_*jcq的帖子

MySQL:避免由GROUP BY子句引起的临时/文件排序

我有一个相当简单的查询,试图显示订阅的电子邮件地址的数量以及取消订阅的数字,按客户分组.

查询:

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)

mysql sql

10
推荐指数
1
解决办法
1万
查看次数

环回模型中的动态属性或聚合函数

我如何在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() …

strongloop loopbackjs

8
推荐指数
2
解决办法
6427
查看次数

在InnoDB表上使用ZF2 Paginator计算Count()的糟糕表现

我试图在一些大型(大约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)

mysql innodb zend-framework2

6
推荐指数
1
解决办法
733
查看次数

标签 统计

mysql ×2

innodb ×1

loopbackjs ×1

sql ×1

strongloop ×1

zend-framework2 ×1