CakePHP 用 MAX 查找

2024-01-01

表格和虚拟数据:

CREATE TABLE IF NOT EXISTS `messages` (
  `id` int(11) unsigned NOT NULL auto_increment,
  `user_id` int(11) unsigned NOT NULL,
  `node_id` int(11) unsigned NOT NULL,
  `reciever_id` int(11) unsigned NOT NULL,
  `created` datetime default NULL,
  `modified` datetime default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=9 ;


INSERT INTO `messages` (`id`, `user_id`, `node_id`, `reciever_id`, `created`, `modified`) VALUES
(1, 1, 1, 15, '2011-12-07 00:00:00', '2011-12-07 02:00:00'),
(2, 15, 1, 1, '2011-12-07 02:00:00', '2011-12-07 02:00:00'),
(3, 15, 2, 1, '2011-12-07 11:00:00', '2011-12-07 11:00:00'),
(4, 1, 2, 15, '2011-12-07 11:00:00', '2011-12-07 11:00:00'),
(5, 1, 3, 18, '2011-12-07 12:00:00', '2011-12-07 12:00:00'),
(6, 18, 3, 1, '2011-12-07 12:00:00', '2011-12-07 12:00:00'),
(7, 1, 4, 18, '2011-12-07 07:00:00', '2011-12-07 07:00:00'),
(8, 18, 4, 1, '2011-12-07 07:00:00', '2011-12-07 07:00:00');


CREATE TABLE IF NOT EXISTS `nodes` (
  `id` int(11) unsigned NOT NULL auto_increment,
  `message` text NOT NULL,
  `author_id` int(11) unsigned NOT NULL,
  `read` tinyint(1) default NULL,
  `created` datetime default NULL,
  `modified` datetime default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;



INSERT INTO `nodes` (`id`, `message`, `author_id`, `read`, `created`, `modified`) VALUES
(1, 'Hi! How are you ? dude wanna meet up this weekend ?', 1, 0, '2011-12-07 02:00:00', '2011-12-07 02:00:00'),
(2, 'Sure. wanna go to Mangalore Pearl to eat Neer Dosa..', 15, 0, '2011-12-07 11:00:00', '2011-12-07 11:00:00'),
(3, 'Hi How are u Buddy ? Long time no see...', 1, 0, '2011-12-07 12:00:00', '2011-12-07 12:00:00'),
(4, 'yeah. are you back in town ? i think we should meet up man. its been ages ....', 18, 0, '2011-12-07 07:00:00', '2011-12-07 07:00:00');

我想要的是来自另一个用户的特定用户的最新消息。例如:Facebook Inbox,您可以在其中找到与人的对话以及按时间顺序排列的最后一次对话和时间。

我尝试过的:

$messages = $this->User->Message->find('all', array(
    'conditions' => array('user_id' => $user_id),
    'group by'   => 'Message.reciever_id',
    'order'      => 'Message.created DESC',
    'fields'     => array('MAX(Message.created)', '*'),
    'contain'    => array(
        'Node'     => array(
            'fields' => array('id', 'message', 'author_id', 'read', 'created'),
        ),
        'Reciever' => array(
            'fields' => array('id', 'first_name', 'last_name'),
            'Oauth'  => array('fields' => array('provider_uid')),
        ),
    ),
));

我得到了什么:

Array (
    [0] => Array
        (
            [0] => Array
                (
                    [MAX(`Message`.`created`)] => 2011-12-07 12:00:00
                )

            [Message] => Array
                (
                    [id] => 1
                    [user_id] => 1
                    [node_id] => 1
                    [reciever_id] => 15
                    [created] => 2011-12-07 00:00:00
                    [modified] => 2011-12-07 02:00:00
                )

            [Node] => Array
                (
                    [id] => 1
                    [message] => Hi! How are you ? dude wanna meet up this weekend ?
                    [author_id] => 1
                    [read] => 0
                    [created] => 2011-12-07 02:00:00
                )

            [Reciever] => Array
                (
                    [id] => 15
                    [first_name] => Mayur
                    [last_name] => Polepalli
                    [Oauth] => Array
                        (
                            [0] => Array
                                (
                                    [provider_uid] => 551131489
                                    [id] => 15
                                    [user_id] => 15
                                )

                        )

                )

        )

)

我没有收到返回的 id: 4 和 7 的消息。

SQL DUMP

SELECT MAX(`Message`.`created`), `Message`.*, `Node`.`id`, `Node`.`message`, `Node`.`author_id`, `Node`.`read`, `Node`.`created`, `Reciever`.`id`, `Reciever`.`first_name`, `Reciever`.`last_name` FROM `messages` AS `Message` LEFT JOIN `nodes` AS `Node` ON (`Message`.`node_id` = `Node`.`id`) LEFT JOIN `users` AS `Reciever` ON (`Message`.`reciever_id` = `Reciever`.`id`) WHERE `user_id` = 1 ORDER BY `Message`.`created` DESC

SELECT `Node`.`id`, `Node`.`message`, `Node`.`author_id`, `Node`.`read`, `Node`.`created` FROM `nodes` AS `Node` WHERE `Node`.`id` = 1

SELECT `Reciever`.`id`, `Reciever`.`first_name`, `Reciever`.`last_name` FROM `users` AS `Reciever` WHERE `Reciever`.`id` = 15

SELECT `Oauth`.`provider_uid`, `Oauth`.`id`, `Oauth`.`user_id` FROM `oauths` AS `Oauth` WHERE `Oauth`.`user_id` = (15)

如果我正确理解你的话,这会给你你想要的结果:

$messages = $this->User->Message->find('all', array(
    'conditions' => array('user_id' => $user_id), 
    'fields' => array('MAX(Node.created) AS created', '*'), 
    'group by' => 'Message.user_id',
    'order' => 'reciever_id'));

这应该会给您 3 个结果,每个用户一个。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CakePHP 用 MAX 查找 的相关文章

  • TCPDF / FPDI 可以接受 PDF 作为字符串吗?

    是否可以将 TCPDF 或 FPDI PDF 作为字符串提供 我有一个传入的 PDF 数组作为字符串 但无法写入磁盘 我在文档中找不到与此相关的任何内容 如果没有 是否有一种有效的方法来从内存或作为对象存储 读取这些 PDF 将它们喂给 F
  • 如何使用 RewriteRule 来为 PHP 修改 $_SERVER['REQUEST_URI'] ?

    有了这个 htaccess RewriteEngine On RewriteRule foo foo 1 here I tried L PT C etc RewriteRule index php L 我已经尝试了第一个 RewriteRu
  • 删除、截断或删除以清理 MySQL 中的表

    我正在尝试清理表格 但没有摆脱表格的实际结构 我有一个id自动递增的列 我不需要保留ID号 但我确实需要它来保持其自动递增的特性 我发现了删除和截断 但我担心其中之一会完全删除整个表 从而使未来的插入命令变得无用 如何从表中删除所有记录以便
  • php exec 返回的结果比直接进入命令行要少

    我有一个 exec 命令 它的行为与通过 Penguinet 给 linux 的相同命令不同 res exec cd mnt mydirectory zcat log file gz echo res 当将命令直接放入命令行时 我在日志文件
  • 根据类别 woocommerce 更改同一产品的默认变体值

    我正在研究一种根据其所属类别显示同一产品的默认变体值的方法 例如 我出售一张带有蓝色和红色选项的卡 当用户进入 一 类别时 我希望默认值为蓝色 如果他属于第二类 则该值将为红色 我发现了一个钩子woocommerce product def
  • PHP别名@函数

    我是 PHP 新手 看到一些使用 前缀调用函数 如 mysql ping 的示例 我感到很困惑 它是做什么用的 谷歌搜索 搜索没有太大帮助 因为 被丢弃并且 别名 不是足够好的关键字 抑制错误 警告和通知 如果你用自定义的方式补充它 你可以
  • MySQL 中布尔值的 TINYINT 与 ENUM(0, 1)

    MyISAM 表和 MySQL 5 1 中具有 0 和 1 值的 Tinyint 或 ENUM 0 1 哪个更好 您可以使用BIT 1 如中提到的MySQL 5 1 参考 http dev mysql com doc refman 5 1
  • 扫描 PHP 上传的病毒

    我目前正在使用以下代码来扫描作为申请表的一部分上传的文件 safe path escapeshellarg dir file command usr bin clamscan stdout safe path out int 1 exec
  • 在 BIRT 中输入参数后更新数据集查询

    在 BIRT 报告设计中传递参数后 如何更改或更新数据集的查询 详细说明 我有一个如下所示的查询 WHERE 该参数标记可以保存不同的值 在用户输入参数后 它看起来像这样 例如 WHERE column name 1 or WHERE co
  • 除括号之间的内容外,所有内容均小写

    考虑以下字符串 LoReM FOO IPSUM dolor BAR Samet fooBar 我正在寻找一种方法来小写所有内容 除了 brackets 之间的内容应该被忽略 所以期望的输出是 lorem FOO ipsum dolor BA
  • 连接 3 三张表

    我有这个图表应该可以解释我的情况 我需要一些关于连接 3 个表的帮助 我不知道如何做这种事情 因此 我可以通过执行以下操作来经历一段检索记录的 while 循环 img src alt Album AlbumID 使用内部联接 http w
  • 如何使用xquery查找节点并向其添加子节点?

    是否可以使用xpath xquery查询特定的xml节点 然后向其导入 添加子节点 示例 代码取自http codepad org gJ1Y2LjM http codepad org gJ1Y2LjM 这是在类似的问题中提出的 但不相同 1
  • 数据读取过程中遇到致命错误

    我正在进行定期更新表扫描 Using connect1 As New MySqlConnection ConnectLocalhost serverString connect1 Open Dim cmd New MySqlCommand
  • 通过复选框选择多行时出错错误未定义索引:复选框

    我想从中选择多行checkbox并想通过单击按钮立即更新它们 我尝试了多种方法 但不起作用 你能帮忙吗 它显示错误为Undefined index checkbox td td
  • 表单提交后显示 $_FILES['image']

    提交表单后如何显示上传的图片 提交表单后 它将是一个预览页面 因此我不会在 MySQLet 中存储图像类型 BLOB 如何显示 FILES image
  • PHP 中的简单 JSON 请求

    我有以下 json country code latitude 45 9390 longitude 24 9811 zoom 6 address city country Romania country code RO region 我只想
  • PHP 相当于朋友或内部

    php 中是否有相当于 朋友 或 内部 的东西 如果没有 是否有任何模式可以遵循来实现这种行为 Edit 抱歉 但标准 Php 不是我想要的 我正在寻找类似于马戏团长所做的事情 我有一些类在后端进行 C 风格的系统调用 并且杂耍已经开始变得
  • MySQL 正在将我的时间戳值转换为 0000-00-00

    我是 PHP 新手 目前仍在学习中 我认为我的注册表有问题 username password email全部成功插入MySQL registered and last seen不要 我以为我正在使用getTimestamp 错了 但它呼应
  • 在 PHP 命令行上显示完整的堆栈跟踪

    Problem 我的 PHP 堆栈跟踪缩写为 Stack trace 0 www html table app create php 128 SoapClient gt call call Array 1 www html table ap
  • 根据最大值连接表

    这是我正在谈论的内容的一个简化示例 Table students exam results id name id student id score date 1 Jim 1 1 73 8 1 09 2 Joe 2 1 67 9 2 09 3

随机推荐

  • 构造函数作为委托 - 在 C# 中可能吗?

    我有一个如下所示的课程 class Foo public Foo int x 我需要将委托传递给某个方法 如下所示 delegate Foo FooGenerator int x 是否可以直接将构造函数作为FooGenerator值 无需输
  • JavaScript getter 和 setter - 递归问题

    JavaScript 的 setter 和 getter 中的 字符有何意义 例如 我有以下代码 可以正常工作 var user get name return this name set name value this name valu
  • 具有通配符属性名称和特定属性值的 C# 和 XPath

    我可以使用 XPath 查找具有名称以特定字符集开头且属性值包含特定值的属性的所有元素吗 例如
  • 调用验证后容器不会调整自身大小

    通过手动交换组件后add and remove 我调用validate 在容器上 根据文档 validate 方法用于使容器布置它的 再次子组件 当该容器的 子组件被修改 添加到容器或从容器中删除 或者 布局相关信息已更改 容器已被 显示
  • 使用 WordApi 1.3 时 context.application 未定义

    使用 WordApi 1 3 应该可以使用新的创建文档方法 https github com OfficeDev office js docs blob WordJs 1 3 Openspec reference word applicat
  • Clojure 模型-视图-控制器 (MVC) 设计

    我正在使用 Java Swing 在 Clojure 中编写桌面 GUI 应用程序 通常 在使用 Java 时 我会根据 MVC 设计模式并使用观察者模式来设计应用程序 通过这种方式 视图与模型分离 并且两者的更改不会相互影响 从而使进一步
  • 在每种情况下使用带有值范围的 switch 语句?

    在Java中 是否可以编写一个switch语句 其中每个case包含多个值 例如 尽管显然以下代码不起作用 switch num case 1 5 System out println testing case 1 to 5 break c
  • PyCUDA/CUDA:不确定性启动失败的原因?

    任何关注 CUDA 的人可能都会看到我对我所参与的项目提出的一些疑问 但对于那些没有见过的人 我将进行总结 抱歉提前问了一个很长的问题 三个内核 一个基于一些输入变量生成数据集 处理位组合 因此可以呈指数增长 另一个解决这些生成的线性系统
  • 如何使用 Spray.io 构建 RESTful API?

    当我使用 Spray io 开发 RESTful API 时 我应该如何构建我的应用程序 我已经看到了这个答案 https stackoverflow com a 14653989 396002关于如何拆分 Spray 应用程序 但我对此不
  • 什么时候不应该使用分号?

    Or 什么不是 T SQL 语句 除了解决歧义之外 T SQL 语法不需要分号来终止语句 尽管如此 伊齐克 本 甘 http www sqlmag com blog puzzled by t sql blog 15 tsql semicol
  • 我在 VBA 中的代码使索引超出范围,但我确信数组的长度正确[重复]

    这个问题在这里已经有答案了 我需要设置val1 and val2分配给变量的数字total 无论我改变变量什么totalto 0 8 表示索引越界 我还打印了我用 MsgBox 引用的每个列表的长度 它显示为 8 我尝试将索引更改为该范围内
  • Rails 将无效路由重定向到 root

    如果我的网站是www foo com如果用户输入www foo com blahblahblah它会说 blahblahblah是一个无效的路径 显然 但我希望它重定向到 root path 以便控制器可以处理 URL 页面www foo
  • 发布版本中的 Swift 链接器错误可通过添加代码修复

    在 Xcode 8 中 我的一个 Swift 项目在调试模式下工作 但在发布模式下无法链接 Undefined symbols for architecture x86 64 Swift UnsafeMutableBufferPointer
  • Android通过蓝牙发送命令失败

    我将实现从 Android 平板电脑向嵌入蓝牙 IC 芯片 Andrino HC 06 的电子设备发送命令的模块 以便通过蓝牙配置我的设备 执行时 发送时设备似乎没有可观察到的响应22 23 54 01 C8 它显示以下超时异常 预计设备将
  • 在 pyqt 中禁用 QComboBox

    是否可以禁用QComboBox在 pyqt 中 就像我们可以在 Win Forms C 中一样 因为我在QComboBox手动的 我想启用QcomboBox仅当管理员登录时 我找到了我的问题的答案 QComboBox setEnabled
  • 我应该如何诊断和防止 JVM 崩溃?

    当我遇到 JVM 崩溃时 我 作为一个对 JVM 内部结构一无所知的 Java 程序员 应该做什么 特别是 您将如何生成可重现的测试用例 我应该在 Sun 或 IBM 的 bug 数据库中搜索什么 我可以从生成的日志文件中获取哪些信息 例如
  • 为什么 CLR/CLI 项目中没有智能感知

    我不知道我是否做错了什么 但是当我尝试编写代码时 没有智能感知弹出窗口指示选项或错误 我正在使用 Microsoft 的 Visual C 2010 创建 CLR CLI 类型的项目 请参阅 2009 年 5 月这篇博文中的第二条评论 ht
  • 当 API 不允许 Access-Control-Allow-Origin 时该怎么办

    我对所有这些同源策略的事情感到疯狂 当我尝试向 Google Maps API 发出请求时 没有出现任何问题 var jsonData ajax url http maps googleapis com maps api geocode j
  • 使用 Vue 单击并编辑文本输入

    我正在寻找一个点击并编辑的 Vue 组件 我发现了a fiddle https jsfiddle net ppyeo1tg 611 并做了一些编辑 它的工作原理如下 小提琴在这里 https jsfiddle net ppyeo1tg 61
  • CakePHP 用 MAX 查找

    表格和虚拟数据 CREATE TABLE IF NOT EXISTS messages id int 11 unsigned NOT NULL auto increment user id int 11 unsigned NOT NULL