[英]Join two mysql tables in different way in php
我有以下mysql表。
1. members
----------
|id |name|
----------
|001|aaa |
|002|bbb |
|003|ccc |
|004|ddd |
----------
2. membershipfees
----------------
|id |date |
----------------
|001|2012-01-01|
|002|2012-01-01|
----------------
我想显示未支付当月费用的会员列表。 我的php代码是
SELECT Members.id, Members.Name FROM Members
LEFT JOIN MembershipFees
ON Members.id = MembersipFees.id
WHERE DATE_FORMAT(MembershipFees.Date, '%Y%m') <> DATE_FORMAT(NOW(), '%Y%m')
ORDER BY Members.id ASC
但是显示0行。 有任何建议请。
您需要将MembersipFees.id IS NULL
条件放在where子句中。 另外,如果date
字段是varchar列,那么您应该使用STR_TO_DATE
函数。
SELECT Members.id, Members.Name
FROM Members
LEFT JOIN membershipfees
ON Members.id = membershipfees.id
AND DATE_FORMAT(STR_TO_DATE(membershipfees.`Date`, '%d-%m-%Y'), '%Y%m') =
DATE_FORMAT(NOW(), '%Y%m')
WHERE membershipfees.id IS NULL
ORDER BY Members.id ASC;
我目前无法对其进行测试,但是请尝试让我知道它是否适合您:
SELECT m.id, m.Name FROM Members m
Where not exists
(select 1 from membershipfees mm
where
mm.Date > DATE_FORMAT(NOW(), '%Y-%m')
and mm.id = m.id)
更新:
它对我有用
尝试这个:
您只需向您的查询添加Membershipfees.id IS NULL条件
SELECT members.id, members.Name
FROM members
LEFT outer JOIN membershipfees
ON members.id = membershipfees.id
and DATE_FORMAT(membershipfees.Date, '%Y%m')
<> DATE_FORMAT(NOW(), '%Y%m')
where membershipfees.id IS NULL
ORDER BY members.id ASC
试试这个查询..
SELECT Members.id, Members.Name FROM Members where id not in (select id from membershipfees WHERE DATE_FORMAT(MembershipFees.Date, '%Y%m') <> DATE_FORMAT(NOW(), '%Y%m') ORDER BY Members.id ASC)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.