Php 未知列';到期日';在';其中第'条;我的sql查询

Php 未知列';到期日';在';其中第'条;我的sql查询,php,mysql,Php,Mysql,我有多个表,我正在使用以下查询按到期日筛选尚未到期的记录 我的问题是: SELECT MT.id, CONCAT(MEM.name,' ',MEM.last_name) AS name, IFNULL((SELECT MAX(MFT.membership_end_date) FROM membership_future_transaction AS MFT WHERE MFT.membership_transaction_id = M

我有多个表,我正在使用以下查询按到期日筛选尚未到期的记录

我的问题是:

SELECT

    MT.id,
    CONCAT(MEM.name,' ',MEM.last_name) AS name,
    IFNULL((SELECT MAX(MFT.membership_end_date) 
        FROM membership_future_transaction AS MFT 
        WHERE MFT.membership_transaction_id = MT.id),MM.end_date) AS expiry_date,
    MEM.phone,
    MEM.email,
    MMST.name AS membership_name,
    MMST.price,
    MMST.session
FROM
    membership_transaction AS MT
    LEFT JOIN member_master AS MEM ON MEM.id = MT.member_id
    LEFT JOIN members_membership AS MM ON MM.membership_transaction_id = MT.id
    LEFT JOIN membership_master AS MMST ON MMST.id = MT.membership_id
WHERE
    MT.is_casual = 'No'
    AND MT.is_deleted = 'No'
    AND MM.is_cancelled = 'No'
    AND expiry_date >= '2016-01-01'"

但是我在“where子句”错误中得到了未知列“expiration\u date”。请帮助我这里缺少了什么。

MySQL有一个很好的功能,您可以使用带有别名的
having
。因此,如果将
where
子句更改为:

WHERE MT.is_casual = 'No' AND
      MT.is_deleted = 'No' AND
      MM.is_cancelled = 'No'
HAVING expiry_date >= '2016-01-01'"

那么它应该会起作用。当然,这不会像您所期望的那样适用于具有重复的
group by

表的查询,该表中有“到期日”列。如果您使用的是别名,请使用别名您不能使用这种方式在何处引用别名。你可以使用HAVING,也可以使用WHERE,直接写出整个别名的内容(这会更快)@DrewPierce谢谢我用
别名编写它