mysql - 有没有办法把以下两句SQL合并成一句
PHP中文网
PHP中文网 2017-04-17 13:57:32
[MySQL讨论组]

想要完成一个统计的页面,具体用求是统计注册用户的数量,
今天注册了几个用户
昨天注册了几个用户
总过注册了几个用户

现在的做发的是分三次查询,

SELECT COUNT(*) AS today FROM `wx2tb_user` WHERE ( to_days(date_format(from_UNIXTIME(reg_time),"%Y-%m-%d")) = to_days(now()) )

SELECT COUNT(*) AS yesterday FROM `wx2tb_user` WHERE ( to_days(date_format(from_UNIXTIME(reg_time),"%Y-%m-%d")) = to_days( DATE_SUB(now(),INTERVAL 1 DAY) ) )

SELECT COUNT(*) AS total FROM `wx2tb_user`

接下来还要返回列表,这样一个页面要有4次数据库查询,有没有什么好的办法减少数据库查询的

PHP中文网
PHP中文网

认证高级PHP讲师

全部回复(5)
黄舟

so easy.

SELECT * from 
(SELECT COUNT(*) AS today FROM `wx2tb_user` WHERE ( to_days(date_format(from_UNIXTIME(reg_time),"%Y-%m-%d")) = to_days(now()) ) ) a,
(SELECT COUNT(*) AS yesterday FROM `wx2tb_user` WHERE ( to_days(date_format(from_UNIXTIME(reg_time),"%Y-%m-%d")) = to_days( DATE_SUB(now(),INTERVAL 1 DAY) ) )) b,
(SELECT COUNT(*) AS total FROM `wx2tb_user`) c
PHP中文网

可以定义一个函数public function user($search){}
你只要定义一样这个$search 就好了

黄舟

想快点,可以使用视图,可以封装个存储过程来调用喽

巴扎黑

合在一起的查询性能未必比你分开查询要快。

阿神
select * from t1

id    name    create_time
1    a    2017-01-17 14:49:37
2    b    2017-01-17 14:49:44
3    c    2017-01-16 14:50:01
4    f    2017-01-13 14:50:09




SELECT
    sum(
        CASE
        WHEN date_format(create_time, "%Y-%m-%d") = date_format(NOW(), "%Y-%m-%d") THEN
            1
        ELSE
            0
        END
    ) AS today_registers,
    sum(
        CASE
        WHEN date_format(create_time, "%Y-%m-%d") = date_format(
            DATE_SUB(now(), INTERVAL 1 DAY),
            "%Y-%m-%d"
        ) THEN
            1
        ELSE
            0
        END
    ) AS yesterday_registers,
    count(*) AS total
FROM
    t1
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号