关于php:构造一个复杂的SQL查询(或多个查询)

关于php:构造一个复杂的SQL查询(或多个查询)

construct a complex SQL query (or queries)

作为一个更大的Web应用程序的一部分(使用CakePHP),我正在组装一个简单的博客系统。这些关系非常简单:每个用户都有一个Blog,其中包含许多条目,其中包含许多评论。

我要合并的元素是"热门条目"的列表。热门条目的定义是上个月评论最多的条目,最终需要按编号的顺序进行排序最近的评论。

理想情况下,我希望解决方案保留在Cake的Model数据检索设备(例如Model->find()等)之内,但是我对此并不乐观。

有人有一个聪明/优雅的解决方案吗?我正在为进行一些疯狂的SQL黑客攻击而努力工作,以使这项工作...


嘿,我正要回来的时候基本上是相同的答案(使用Cake的Model :: find):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$this->loadModel('Comment');

$this->Comment->find( 'all', array(
    'fields' => array('COUNT(Comment.id) AS popularCount'),
    'conditions' => array(
        'Comment.created >' => strtotime('-1 month')
    ),
    'group' => 'Comment.blog_post_id',
    'order' => 'popularCount DESC',

    'contain' => array(
        'Entry' => array(
            'fields' => array( 'Entry.title' )
        )
    )
));

它不是完美的,但是它可以工作并且可以在上面进行改进。

我进行了另一项改进,使用Containable行为提取了Entry数据而不是Comment数据。


应该不会太糟,您只需要一个分组依据(这不在我的脑海,所以可以原谅语法错误):

1
2
3
4
5
SELECT entry-id, count(id) AS c
FROM comment
WHERE comment.createdate >= DATE_SUB(CURDATE(), INTERVAL 1 MONTH)
GROUP BY entry-id
ORDER BY c DESC


如果您对注释的时间敏感性不感到困惑,则可以通过在条目表中添加" comment_count"字段,并配置Comment属于条目关联的counterCache键,来使用CakePHP的counterCache功能。字段,然后在Entry模型上调用find()。


您可能希望WHERE子句获得最近30天的评论:

1
2
3
4
5
SELECT entry-id, count(id) AS c
FROM comment
WHERE comment_date + 30 >= sysdate
GROUP BY entry-id
ORDER BY c DESC

推荐阅读

    linux看用户信息命令?

    linux看用户信息命令?,系统,密码,信息,状态,软件,情况,命令,用户,网络,时间,l

    linux查询网关命令?

    linux查询网关命令?,网络,信息,地址,环境,系统,网关,名字,中心,状态,命令,lin

    linux下删除用户命令?

    linux下删除用户命令?,系统,代码,邮箱,用户组,命令,用户,名称,管理,电脑,账

    用户id的linux命令?

    用户id的linux命令?,系统,密码,信息,联系方式,地址,位置,用户,命令,用户名,

    linux删除用户组命令?

    linux删除用户组命令?,管理,系统,密码,电脑,名称,用户,用户组,名字,信息,工

    linux命令查询参数?

    linux命令查询参数?,网络,信息,设备,系统,服务,状态,情况,工作,地址,命令,Lin

    linux下用户权限命令?

    linux下用户权限命令?,管理,系统,密码,地址,权限,时间,基础,信息,基本知识,

    linux登陆用户命令?

    linux登陆用户命令?,系统,工具,信息,地址,软件,工作,命令,数字,服务,名称,Lin

    linux用户名改名命令?

    linux用户名改名命令?,系统,密码,命令,代码,名称,用户名,用户,终端,主机名,

    linux查询分辨率命令?

    linux查询分辨率命令?,情况,设备,系统,分辨率,数据,命令,屏幕,屏幕分辨率,

    linux常用命令查询?

    linux常用命令查询?,工作,地址,系统,信息,命令,目录,管理,标准,常用命令,控

    linux用户分组命令?

    linux用户分组命令?,系统,命令,电脑,信息,时间,标准,资料,用户,文件,用户组,L

    linux命令查询汉语?

    linux命令查询汉语?,工作,地址,系统,信息,命令,目录,标准,状态,软件,亚洲,基

    linux命令改用户所属?

    linux命令改用户所属?,系统,文件,名称,用户组,命令,用户,名录,基本知识,所

    linux系统用户组命令?

    linux系统用户组命令?,系统,管理,密码,代码,用户组,用户,命令,邮箱,电脑,名

    linux用户管理的命令?

    linux用户管理的命令?,系统,管理,信息,地址,工作,用户,单位,基础,数据,命令,L

    linux用户退出命令行?

    linux用户退出命令行?,状态,档案,标准,系统,命令,文件,模式,编辑,指令,主机,l

    linux下查询历史命令?

    linux下查询历史命令?,地址,信息,系统,服务,数据,连续,命令,数字,名称,环境,l

    linux查询表结构命令?

    linux查询表结构命令?,系统,标准,信息,数据,地址,设备,时间,适当,软件,命令,l

    linux网络命令查询?

    linux网络命令查询?,信息,网络,系统,地址,工作,状态,技术,电脑,命令,设备,lin