php&;mysql-获取用户上一个月的付款,并将其与当前月份进行比较以发送电子邮件

php&;mysql-获取用户上一个月的付款,并将其与当前月份进行比较以发送电子邮件,php,mysql,email,payment,Php,Mysql,Email,Payment,这是一个学校项目,我需要给那些还没有支付当月账单的人发送电子邮件 我的桌子看起来像这样: id id_profile code month(m-Y) value 1 1 XXXXXXXX 10-2016 50 2 1 XXXXXXXX 09-2016 50 3 1 XXXXXXXX 11-2016 50 4

这是一个学校项目,我需要给那些还没有支付当月账单的人发送电子邮件

我的桌子看起来像这样:

id   id_profile     code       month(m-Y)    value
1         1       XXXXXXXX      10-2016       50
2         1       XXXXXXXX      09-2016       50
3         1       XXXXXXXX      11-2016       50
4         2       XXXXXXXX      09-2016       50
5         2       XXXXXXXX      08-2016       50
6         2       XXXXXXXX      10-2016       50
SELECT date_format(max(str_to_date(t1.month,'%m-%Y')),'%m-%Y') AS debt, t2.email
FROM incomes AS t1 INNER JOIN profiles AS t2 ON t1.id_profile = t2.id 
GROUP BY t1.id_profile
while($row = mysqli_fetch_assoc($sql)){ // To excute with every row
    foreach ($row as $campo => $valor){ 
        $$campo = $valor;
    }

    if (date("m-Y", strtotime('01-'.$debt)) < date('m-Y')) {
        //DO YOUR STUFF HERE
    }

}
我正在使用内部连接来获取用户的电子邮件,这样就可以了。 我需要的是获得最高的支付月,因为用户将能够支付下个月或最旧的付款可能会被拒绝,并不得不再次支付他们

我当前的查询:

SELECT t1.month, t2.email FROM incomes AS t1 INNER JOIN profiles AS t2 ON t1.id_profile = t2.id
因此,获取支付较高的月份,并将其与当前月份进行比较,以查看用户是否有债务,并向用户发送一封电子邮件,提醒他们必须付款


我在想些什么。有人能帮忙吗?

好的,我找到了一种方法,可以在不更改月份字段上的日期格式(如@sean所建议的)的情况下完成这项工作

我使用了
MAX
函数以及
date\u格式
str\u to\u date
来获取最高工资月份,还使用
groupby
来获得每个用户一行,并使用一些php将月份和年份与当前日期进行比较,以向欠当前月份的用户发送电子邮件

因此,MYSQL查询如下所示:

id   id_profile     code       month(m-Y)    value
1         1       XXXXXXXX      10-2016       50
2         1       XXXXXXXX      09-2016       50
3         1       XXXXXXXX      11-2016       50
4         2       XXXXXXXX      09-2016       50
5         2       XXXXXXXX      08-2016       50
6         2       XXXXXXXX      10-2016       50
SELECT date_format(max(str_to_date(t1.month,'%m-%Y')),'%m-%Y') AS debt, t2.email
FROM incomes AS t1 INNER JOIN profiles AS t2 ON t1.id_profile = t2.id 
GROUP BY t1.id_profile
while($row = mysqli_fetch_assoc($sql)){ // To excute with every row
    foreach ($row as $campo => $valor){ 
        $$campo = $valor;
    }

    if (date("m-Y", strtotime('01-'.$debt)) < date('m-Y')) {
        //DO YOUR STUFF HERE
    }

}
php应该是这样的:

id   id_profile     code       month(m-Y)    value
1         1       XXXXXXXX      10-2016       50
2         1       XXXXXXXX      09-2016       50
3         1       XXXXXXXX      11-2016       50
4         2       XXXXXXXX      09-2016       50
5         2       XXXXXXXX      08-2016       50
6         2       XXXXXXXX      10-2016       50
SELECT date_format(max(str_to_date(t1.month,'%m-%Y')),'%m-%Y') AS debt, t2.email
FROM incomes AS t1 INNER JOIN profiles AS t2 ON t1.id_profile = t2.id 
GROUP BY t1.id_profile
while($row = mysqli_fetch_assoc($sql)){ // To excute with every row
    foreach ($row as $campo => $valor){ 
        $$campo = $valor;
    }

    if (date("m-Y", strtotime('01-'.$debt)) < date('m-Y')) {
        //DO YOUR STUFF HERE
    }

}
while($row=mysqli\u fetch\u assoc($sql)){//对每一行执行
foreach($campo=>$valor的行){
$$campo=$valor;
}
如果(日期(“m-Y”,标准时间('01-'。$debt))<日期('m-Y')){
//在这里做你的事
}
}
因为月份字段不是标准日期,所以我必须转换字符串


我希望这对某人有帮助

好的,我找到了一种方法,可以在不更改月份字段上的日期格式(如@sean所建议的)的情况下完成此操作

我使用了
MAX
函数以及
date\u格式
str\u to\u date
来获取最高工资月份,还使用
groupby
来获得每个用户一行,并使用一些php将月份和年份与当前日期进行比较,以向欠当前月份的用户发送电子邮件

因此,MYSQL查询如下所示:

id   id_profile     code       month(m-Y)    value
1         1       XXXXXXXX      10-2016       50
2         1       XXXXXXXX      09-2016       50
3         1       XXXXXXXX      11-2016       50
4         2       XXXXXXXX      09-2016       50
5         2       XXXXXXXX      08-2016       50
6         2       XXXXXXXX      10-2016       50
SELECT date_format(max(str_to_date(t1.month,'%m-%Y')),'%m-%Y') AS debt, t2.email
FROM incomes AS t1 INNER JOIN profiles AS t2 ON t1.id_profile = t2.id 
GROUP BY t1.id_profile
while($row = mysqli_fetch_assoc($sql)){ // To excute with every row
    foreach ($row as $campo => $valor){ 
        $$campo = $valor;
    }

    if (date("m-Y", strtotime('01-'.$debt)) < date('m-Y')) {
        //DO YOUR STUFF HERE
    }

}
php应该是这样的:

id   id_profile     code       month(m-Y)    value
1         1       XXXXXXXX      10-2016       50
2         1       XXXXXXXX      09-2016       50
3         1       XXXXXXXX      11-2016       50
4         2       XXXXXXXX      09-2016       50
5         2       XXXXXXXX      08-2016       50
6         2       XXXXXXXX      10-2016       50
SELECT date_format(max(str_to_date(t1.month,'%m-%Y')),'%m-%Y') AS debt, t2.email
FROM incomes AS t1 INNER JOIN profiles AS t2 ON t1.id_profile = t2.id 
GROUP BY t1.id_profile
while($row = mysqli_fetch_assoc($sql)){ // To excute with every row
    foreach ($row as $campo => $valor){ 
        $$campo = $valor;
    }

    if (date("m-Y", strtotime('01-'.$debt)) < date('m-Y')) {
        //DO YOUR STUFF HERE
    }

}
while($row=mysqli\u fetch\u assoc($sql)){//对每一行执行
foreach($campo=>$valor的行){
$$campo=$valor;
}
如果(日期(“m-Y”,标准时间('01-'。$debt))<日期('m-Y')){
//在这里做你的事
}
}
因为月份字段不是标准日期,所以我必须转换字符串


我希望这对某人有帮助

为什么您的
month
列采用这种格式?如果您使用标准的日期格式-
YYYY-MM-DD
,即使您不需要日期值,只是在默认情况下将其设置为
01
,这也会简单得多。这样,您就可以在查询中执行此操作,而不需要php循环来计算字符串值。那么,假设month字段是您建议的格式,那么查询将是怎样的呢?谢谢你,我还在学习,所以请容忍我。为什么你的
month
专栏采用这种格式?如果您使用标准的日期格式-
YYYY-MM-DD
,即使您不需要日期值,只是在默认情况下将其设置为
01
,这也会简单得多。这样,您就可以在查询中执行此操作,而不需要php循环来计算字符串值。那么,假设month字段是您建议的格式,那么查询将是怎样的呢?谢谢你,我还在学习,所以请容忍我。