0

次の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行を示しています。任意の提案をお願いします。

4

4 に答える 4

3

MembersipFees.id IS NULLcondition is 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;

ここでSQLFIDDLEデモを参照してください

于 2012-08-22T06:29:25.313 に答える
1

今はテストできませんが、試してみて、うまくいくかどうか教えてください。

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)

更新:
それは私のために働く

于 2012-08-22T06:32:11.137 に答える
0

これを試して:

クエリにmembershipfees.idISNULL条件を追加する必要があります

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
于 2012-08-22T06:33:31.757 に答える
0

このクエリを試してください..

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)
于 2012-08-22T07:11:22.363 に答える