Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 根据日期范围从月表MySQL中获取数据(2016年1月1日至2016年4月1日的ex数据)_Php_Mysql - Fatal编程技术网

Php 根据日期范围从月表MySQL中获取数据(2016年1月1日至2016年4月1日的ex数据)

Php 根据日期范围从月表MySQL中获取数据(2016年1月1日至2016年4月1日的ex数据),php,mysql,Php,Mysql,我有每月的数据库表,存储我的网站的每日用户注册计数。在我的UI设计中,我有两个日期之间的daterange piker,我必须获得提供的日期范围之间的注册用户总数。(但日期范围之间将有4或5个多月(基于日期范围))我将如何获得数据?我需要优化的解决方案,所以我将从多个mysql表中获得数据的总和 CREATE TABLE daily_analytics_01_2017 ( id int(11) NOT NULL AUTO_INCREMENT, country varchar(255) DEF

我有每月的数据库表,存储我的网站的每日用户注册计数。在我的UI设计中,我有两个日期之间的daterange piker,我必须获得提供的日期范围之间的注册用户总数。(但日期范围之间将有4或5个多月(基于日期范围))我将如何获得数据?我需要优化的解决方案,所以我将从多个mysql表中获得数据的总和

CREATE TABLE daily_analytics_01_2017 ( 
id int(11) NOT NULL AUTO_INCREMENT, 
country varchar(255) DEFAULT NULL, 
device varchar(255) DEFAULT NULL, 
browser varchar(255) DEFAULT NULL, 
gender varchar(255) DEFAULT NULL, u
ser_loginCount int(11) NOT NULL, 
user_signup_count int(11) NOT NULL, 
tracking_date date NOT NULL, 
PRIMARY KEY (id) ) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=latin1;
上表为每个月的名称,如

每日分析月年


除此之外,我还必须每月跟踪登录和其他操作的所有数据。

如果将所有注册信息存储在一个表中,不是更好吗?它更易于查询和维护

// the selected range will have to be formatted
$from = '2017-01-01 00:00:00';
$to = '2017-03-15 23:59:59';

// you will have to run this query just once on one particular table 
$query = "SELECT count(*) as number_of_signups FROM tablename WHERE created_on BETWEEN $from AND $to";
也就是说,如果您确实希望每月将注册存储在不同的表中,那么您可以使用timestamp列上的数据范围查询每个表

// initialization
$count = 0;

// the selected range will have to be formatted
$from = '2017-01-01 00:00:00';
$to = '2017-03-15 23:59:59';

$con=mysqli_connect("yourhost","dbuser","password","your_db");
// Check connection
if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }

// run this query on all the signup tables 
$query = "SELECT count(*) as number_of_signups FROM tablename WHERE created_on BETWEEN $from AND $to";

$result=mysqli_query($con,$query);

// Associative array
$row=mysqli_fetch_assoc($result);
$count += $row['number_of_signups'];

// Free result set
mysqli_free_result($result);

mysqli_close($con);
正如您所看到的,这一部分变得非常冗长和复杂:

// run this query on all the signup tables 
$query = "SELECT count(*) as number_of_signups FROM tablename WHERE created_on BETWEEN $from AND $to";

$result=mysqli_query($con,$query);

// Associative array
$row=mysqli_fetch_assoc($result);
$count += $row['number_of_signups'];
说明: 按月创建表,创建一个表并使用它不是一个好主意。上面的查询就足够了

$first - start date
$last - end date

选中此代码,它将显示所有以前12个月的登录用户注册信息。您需要将此代码更改为表字段和表名称

select date_year y, date_month m, count(*) cnt
            from
            (select id, year(access_time) date_year, month(access_time) date_month, access_time, uid
            from users_login_detail_history
            where date(access_time) >= date_format(concat (year(date_add(date(now()), interval -1 year)), '-' , month(date_add(date(now()), interval -1 year)) , '-1'), '%Y-%m-%d')) login_data
            group by date_year, date_month
            order by date_year, date_month;
从该sql中,这是输出结果

使用以下函数生成查询:

function getMonthWiseQuery($fromdate,$todate)
{

    $fromexplode=explode("-",$fromdate);
    $startyear=$fromexplode[0];
    $startmonth=$fromexplode[1];
    $startdate=$fromexplode[2];


    $toexplode=explode("-",$todate);
    $endyear=$toexplode[0];
    $endmonth=$toexplode[1];
    $enddate=$toexplode[2];

    $queryBuild=array();
    $startmonthnew = $startmonth;
    $count=0;
    for ($i = $startyear; $i <= $endyear; $i++) {
        for ($j = $startmonthnew; $j < 13; $j++) {

                $count++;
                if ($fromdate) {

                    if (strlen($j) == 1) {
                        $j = "0" . $j;
                    }
                    if($count!=1)
                    {
                        $query=" UNION ALL";
                        $query.= " select sum(user_with_referral) as Total_UserBy_referral,sum(total_unverified_users) as TotalUnverifiedUsers,sum(user_signup_count) as TotalRegisteredUsers,sum(user_signUpactivationSuccess_count) as TotalActivatedUsers from daily_analytics_{$j}_{$i} where tracking_date BETWEEN \"{$fromdate}\" and \"{$todate}\" ";
                    }else{
                        $query = "select sum(user_with_referral) as Total_UserBy_referral,sum(total_unverified_users) as TotalUnverifiedUsers,sum(user_signup_count) as TotalRegisteredUsers,sum(user_signUpactivationSuccess_count) as TotalActivatedUsers from daily_analytics_{$j}_{$i} where tracking_date BETWEEN \"{$fromdate}\" and \"{$todate}\" ";
                    }

                    array_push($queryBuild,$query);

                }

            if ($j == 12) {
                $startmonthnew = 1;
                break;
            }

            if ($endyear == $i) {
                if ($j == $endmonth) {
                    break;
                }
            }

        }
    }

return implode(" ",$queryBuild);
}
然后从这个查询中,我们可以从表的并集中获取总结果的总和-

   select sum(Total_UserBy_referral) as Total_UserBy_referral , sum(TotalUnverifiedUsers) as TotalUnverifiedUsers,sum(TotalRegisteredUsers) as TotalRegisteredUsers, sum(TotalActivatedUsers) as TotalActivatedUsers from (
select sum(user_with_referral) as Total_UserBy_referral,sum(total_unverified_users) as TotalUnverifiedUsers,sum(user_signup_count) as TotalRegisteredUsers,sum(user_signUpactivationSuccess_count) as TotalActivatedUsers from daily_analytics_01_2017 where tracking_date BETWEEN "2017-01-01" and "2017-03-21"  
UNION ALL 
select sum(user_with_referral) as Total_UserBy_referral,sum(total_unverified_users) as TotalUnverifiedUsers,sum(user_signup_count) as TotalRegisteredUsers,sum(user_signUpactivationSuccess_count) as TotalActivatedUsers from daily_analytics_02_2017 where tracking_date BETWEEN "2017-01-01" and "2017-03-21"  
UNION ALL 
select sum(user_with_referral) as Total_UserBy_referral,sum(total_unverified_users) as TotalUnverifiedUsers,sum(user_signup_count) as TotalRegisteredUsers,sum(user_signUpactivationSuccess_count) as TotalActivatedUsers from daily_analytics_03_2017 where tracking_date BETWEEN "2017-01-01" and "2017-03-21" 
) as t

您可以共享表结构吗?当您只需将注册日期添加到用户表中时,为什么会有一个额外的表?要做到这一点,您只需在日期在您的范围(月)内提取数据即可创建表
daily\u analytics\u 01\u 2017
id
int(11)NOT NULL自动增量,
country
varchar(255)默认空,
device
varchar(255)默认空,
browser
varchar(255)默认为空,
gender
varchar(255)默认为空,
user\u loginCount
int(11)不为空,
user\u signup\u count
int(11)不为空,
tracking\u date
date不为空,主键(
id
)引擎=InnoDB自动增量=16默认字符集=拉丁文1;上表显示了每个月的名称,如daily_analytics_uu。根据该代码,您似乎正在为每个月的数据创建一个表。这将增加表数。是的,但我还必须维护其他分析,用于注册、登录、设置密码等其他用户管理任务。每天。感谢Muralidhar Bg,但表不是单一的月度表。我将如何做到这一点。这令人困惑,你需要月度数据,但你有月度表@好的,我来检查一下。午餐时间到了。你在不同的桌子上找到了相同的日期……你不认为这会减慢你的反应吗。如果您想这样做,为什么不在月份的基础上对不同的表使用SimpleFor循环(如果您的年份相同)。
    select sum(user_with_referral) as Total_UserBy_referral,sum(total_unverified_users) as TotalUnverifiedUsers,sum(user_signup_count) as TotalRegisteredUsers,sum(user_signUpactivationSuccess_count) as TotalActivatedUsers from daily_analytics_01_2017 where tracking_date BETWEEN "2017-01-01" and "2017-03-21"  
UNION ALL 
select sum(user_with_referral) as Total_UserBy_referral,sum(total_unverified_users) as TotalUnverifiedUsers,sum(user_signup_count) as TotalRegisteredUsers,sum(user_signUpactivationSuccess_count) as TotalActivatedUsers from daily_analytics_02_2017 where tracking_date BETWEEN "2017-01-01" and "2017-03-21"  
UNION ALL 
select sum(user_with_referral) as Total_UserBy_referral,sum(total_unverified_users) as TotalUnverifiedUsers,sum(user_signup_count) as TotalRegisteredUsers,sum(user_signUpactivationSuccess_count) as TotalActivatedUsers from daily_analytics_03_2017 where tracking_date BETWEEN "2017-01-01" and "2017-03-21" 
   select sum(Total_UserBy_referral) as Total_UserBy_referral , sum(TotalUnverifiedUsers) as TotalUnverifiedUsers,sum(TotalRegisteredUsers) as TotalRegisteredUsers, sum(TotalActivatedUsers) as TotalActivatedUsers from (
select sum(user_with_referral) as Total_UserBy_referral,sum(total_unverified_users) as TotalUnverifiedUsers,sum(user_signup_count) as TotalRegisteredUsers,sum(user_signUpactivationSuccess_count) as TotalActivatedUsers from daily_analytics_01_2017 where tracking_date BETWEEN "2017-01-01" and "2017-03-21"  
UNION ALL 
select sum(user_with_referral) as Total_UserBy_referral,sum(total_unverified_users) as TotalUnverifiedUsers,sum(user_signup_count) as TotalRegisteredUsers,sum(user_signUpactivationSuccess_count) as TotalActivatedUsers from daily_analytics_02_2017 where tracking_date BETWEEN "2017-01-01" and "2017-03-21"  
UNION ALL 
select sum(user_with_referral) as Total_UserBy_referral,sum(total_unverified_users) as TotalUnverifiedUsers,sum(user_signup_count) as TotalRegisteredUsers,sum(user_signUpactivationSuccess_count) as TotalActivatedUsers from daily_analytics_03_2017 where tracking_date BETWEEN "2017-01-01" and "2017-03-21" 
) as t