您好,我真的被困在这里,这是我尽力而为的地方
select 13c_name,13c_mobile,13c_pid,p.13c_usid,p.13c_comp_id,13c_amount,
13c_mode,13c_month,13c_year,13c_rec,13c_rec_date,13c_check,13c_comments,
13c_status,13c_ip,13c_message,13c_rec_by,13c_invoice_pay from
13c_users u , 13c_payments p
where ( (u.13c_usid=p.13c_usid and 13c_subs='1') and (13c_year IN ('$new_year') and 13c_month NOT IN (1|2|3|4) or 13) )
我想要实现的是这样的东西
我要从
13c_users
中选择所有已订阅的成员(13c_subs='1')
到表13c_payments
的每月付款(可能没有) 至今为止已支付任何一年的任何月份(13c_month
13c_year stores
表中的月号和13c_payment
年号)
现在上面的查询效果不错,但是它不会选择尚未支付任何费用的用户,例如已订阅该用户且未支付任何月份的用户,该查询将不会与join tbale匹配。
请在此处检查查询我在做什么错!
////////////////////////////////// 已编辑 ///// ////////////
到现在为止,我仍然可以达到预期的效果:
select * from ( (select * from 13c_users u Left JOIN 13c_payments p ON
u.13c_usid=p.13c_usid where (13c_subs='1' and u.13c_comp_id='$yid') ) as T )
where ( (13c_year is NULL or 13c_year IN (2019) ) and (13c_month IS NULL or
13c_month NOT IN (1,2,3,4,5,6,7,8,9,10,11,12)) and (T.13c_invoice_pay='0' or T.13c_invoice_pay is
NULL ))
上面的查询选择所有从未付款的会员,但不选择前两个月且之后未付款的会员。
表格付款可获取在单独行中进行的每笔付款的输入。
请帮助我,我在这里卡住了。
我知道查询的这一部分肯定有问题
(13c_year is NULL or 13c_year IN (2019) ) and (13c_month IS NULL or
13c_month NOT IN (1,2,3,4,5,6,7,8,9,10,11,12)
如果行没有提到的月份,我想选择该行13c_month NOT IN(1,2,3,4,5,6,7,8,9,10,11,12)但行是分开的,因此它将始终选择每一行
答案 0 :(得分:1)
这是一个非常简化的示例,其中我计算出预期的付款次数和已付款的月数-如果不一致,那么我很感兴趣
drop table if exists u,t;
create table u (id int,subs int, dt date);
create table t (uid int,dt date);
insert into u values (1,1,'2019-01-01'),(2,1,'2018-11-01'),(3,1,'2018-09-01');
insert into t values
(1,'2019-01-01'),
(2,'2018-11-11'),(2,'2018-11-13'),(2,'2019-01-01');
select id,
((year(now()) * 12 + month(Now())) - (year(u.dt) * 12 + month(u.dt))) + 1 numexpected,
coalesce(s.paidup,0) paidup
from u
left join
(select t.uid,count(distinct year(t.dt),month(t.dt)) paidup
from t
group by t.uid) s on s.uid = u.id
where ((year(now()) * 12 + month(Now())) - (year(u.dt) * 12 + month(u.dt))) + 1 <> coalesce(s.paidup,0);
+------+-------------+--------+
| id | numexpected | paidup |
+------+-------------+--------+
| 2 | 3 | 2 |
| 3 | 5 | 0 |
+------+-------------+--------+
2 rows in set (0.00 sec)
请注意,每个月都要付款的期望似乎有点简单-预付款和滞纳金怎么办?例如,UID 2进行了3笔付款,但2笔在同一个月内。