Php 这个查询也给了我空白的结果!!!Mysqli连接表

Php 这个查询也给了我空白的结果!!!Mysqli连接表,php,mysql,mysqli,Php,Mysql,Mysqli,此图显示有些行具有空值,我不需要它们 而且这个查询需要很长时间才能加载 基本上我想要的是 我在从数据库的两个表中获取值时遇到一些问题。我的数据库中有两个表1是mem,2是payment mem stores name和drawid of users payment table stores draw和分期付款 用户每月向我们付费。因此,如果提款id为1的用户在2月份向我们付款,则两个表中的值分别为mem drawid=1和name=something付款提款=1和分期付款=2 mem中的提款ID

此图显示有些行具有空值,我不需要它们

而且这个查询需要很长时间才能加载

基本上我想要的是

我在从数据库的两个表中获取值时遇到一些问题。我的数据库中有两个表1是mem,2是payment mem stores name和drawid of users payment table stores draw和分期付款

用户每月向我们付费。因此,如果提款id为1的用户在2月份向我们付款,则两个表中的值分别为mem drawid=1和name=something付款提款=1和分期付款=2

mem中的提款ID与提款付款相同

因此,表具有多对多关系。现在我需要找到所有在第4个月之前还没有支付1期分期付款的会员的名单

 SELECT drawid,contact,dnd,mem.name,link,address, count(*) as numPayments,NULL numPaidPayments ,NULL PAID_CONTACT,NULL NAME_PAID FROM mem 
LEFT JOIN payment ON (mem.drawid = payment.draw) GROUP BY 
drawid HAVING numPayments < '4'
UNION
SELECT NULL drawid,NULL contact, NULL dnd, NULL name,NULL link, NULL address,NULL numPayments,COUNT(*) as numPaidPayments ,contact PAID_CONTACT,mem.name NAME_PAID  FROM mem 
INNER JOIN payment ON (mem.drawid = payment.draw) GROUP BY 
drawid HAVING numPaidPayments < '4' order by link desc 
我已经厌倦了解决这个问题,请给我一些建议,我从一个星期以来一直在努力解决这个问题

我正在为这两个表结构添加图像

在此处输入图像描述


似乎您只想计算每个成员的付款:

select 
  m.*,
  (select count(*) from payment p where p.draw = m.drawid) as num_paid_payments
from mem m;
仅限于支付少于四笔款项的人员:

select *
from
(
  select 
    m.*,
    (select count(*) from payment p where p.draw = m.drawid) as num_paid_payments
  from mem m
) paid
where num_paid_payments < 4;
或者以不同的方式写:

select 
  m.*,
  coalesce(cnt, 0) as num_paid_payments
from mem m
left join
(
  select draw, count(*) as cnt
  from payment
  group by draw
) p on p.draw = m.drawid
where coalesce(cnt, 0) < 4;
select 
  m.*, 
  count(p.draw) as num_paid_payments
from mem m
left join payment p on p.draw = m.drawid
group by m.drawid
having count(p.draw) < 4;
或者以不同的方式写:

select 
  m.*,
  coalesce(cnt, 0) as num_paid_payments
from mem m
left join
(
  select draw, count(*) as cnt
  from payment
  group by draw
) p on p.draw = m.drawid
where coalesce(cnt, 0) < 4;
select 
  m.*, 
  count(p.draw) as num_paid_payments
from mem m
left join payment p on p.draw = m.drawid
group by m.drawid
having count(p.draw) < 4;

没有额外的信息,我们很难帮助你。请告诉我们有关您试图通过查询实现的目标的更多信息。空白结果意味着根本没有结果。显然是一个错误的查询。$m是您的值或变量??首先,您不能选择不在group by中的字段,如link、address…请解释您的表和您的join。您是否可以编辑您的代码以便查询在选定的列之间变成可读的新行?例如,这太棒了!!!但我只需要找到那些支付金额少于4美元的会员,你太棒了。