php - MySQL 查询语句转换为 Codeigniter Active record 样式查询语句,带有 SUM()

标签 php mysql codeigniter activerecord

我正在尝试找出转换此 mysql 查询的最佳方法

SELECT
        SUM(invite.friendID = $mID AND invite.decidedwhen = '0000-00-00 00:00:00' AND evnt.ends >= '$event_ts' and invite.isactive = 0 and evnt.isactive = 0) AS invites_undecided,
        SUM(invite.friendID = $mID AND invite.decidedwhen != '0000-00-00 00:00:00' AND invite.yes = 1 AND evnt.ends >= '$event_ts' and invite.isactive = 0) and evnt.isactive = 0 AS invites_yes,
        SUM(invite.friendID = $mID AND invite.decidedwhen != '0000-00-00 00:00:00' AND invite.no = 1 AND evnt.ends >= '$event_ts' and invite.isactive = 0 and evnt.isactive = 0) AS invites_no,
        SUM(invite.friendID = $mID AND invite.decidedwhen != '0000-00-00 00:00:00' AND invite.maybe = 1 AND evnt.ends >= '$event_ts' and invite.isactive = 0 and evnt.isactive = 0) AS invites_maybe
FROM user_event_invite AS invite
JOIN user_event AS evnt ON evnt.eID = invite.eID

使用 Codeigniters 事件记录格式的内容。 EG

$this->db->select()
  ->from('user_event')
  ->... something?

标准的 mysql 语句工作得很好。但以统一一切的名义,我想使用事件记录。有办法做到这一点吗?我找不到 SUM() 的任何内容

最佳答案

(更多的是评论而不是答案,因为我还没有测试过;但它可能仍然有帮助)

事件记录有一个 $this->db->select_sum(); 函数,并且(这是我不确定的一点)您可能可以使用方法链。所以这里有一些值得尝试的事情。

第 1 阶段是将常见内容剥离到 WHERE 中。如果 WHERE 被索引,它会加快速度。这将为您提供(括号也已修复 - 您的 SQL 有错误)

SELECT
    SUM(invite.decidedwhen = '0000-00-00 00:00:00') AS invites_undecided,
    SUM(invite.decidedwhen != '0000-00-00 00:00:00' AND invite.yes = 1 ) AS invites_yes,
    SUM(invite.decidedwhen != '0000-00-00 00:00:00' AND invite.no = 1) AS invites_no,
    SUM(invite.decidedwhen != '0000-00-00 00:00:00' AND invite.maybe = 1) AS invites_maybe
FROM user_event_invite AS invite
   JOIN user_event AS evnt ON evnt.eID = invite.eID
WHERE invite.friendID = $mID  AND evnt.ends >= '$event_ts' and invite.isactive = 0 AND evnt.isactive = 0

此外,如果您可以通过说接受来简化,使"is"、“否”、“也许”都是排他性的,那么您也可以去掉“决定时间”以进一步简化。 (理想情况下,您只需计算“COUNT”并减去其余部分,但不清楚如何在事件记录的一个查询中执行此操作)。

SELECT
    SUM(invite.decidedwhen = '0000-00-00 00:00:00') AS invitees_undecided,
    SUM(invite.yes = 1 ) AS invites_yes,
    SUM(invite.no = 1) AS invites_no,
    SUM(invite.maybe = 1) AS invites_maybe
FROM user_event_invite AS invite
   JOIN user_event AS evnt ON evnt.eID = invite.eID
WHERE invite.friendID = $mID  AND evnt.ends >= '$event_ts' AND invite.isactive = 0 AND evnt.isactive = 0

现在将其用于事件记录上的方法链:

$this->db->select_sum('invite.decidedwhen = '0000-00-00 00:00:00', 'invite_undecided')
  ->select_sum('yes', 'invite_yes')
  ->select_sum('no', 'invite_no')
  ->etc
  ->from('user_event_invite')
  ->join('user_event', 'user_event.eID=user_event_invite.eID)
  ->where('friendID', '$mID')
  ->where('user_event.ends >=', $event_ts)
  -> etc

关于php - MySQL 查询语句转换为 Codeigniter Active record 样式查询语句,带有 SUM(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13189132/

相关文章:

php - 向博客添加类别和子类别

php - CodeIgniter - 通过 ajax 和代码点火器电子邮件库将内容发送到 Controller

php - 无法理解 REGEX 中 * 和 + 量词之间的区别

php - 通过元素指针(别名)删除数组元素

Windows 2008 服务器上的 MySQL 5(32 位)

php - 从动态 jquery 表单字段向 mysql 添加行

php - 为网站构建 CMS

php - Codeigniter 迁移自动和 key 问题

php - 中央显示屏 :block links with CSS float left

php - 使用 php 和 mysql 的 GoogleCharts