1
我有两个MySQL表成员和member_cards。会员卡的每个会员卡都可以有三种状态。MySQL查询找到最近的成员
- 活动=起始日期< =今天< = END_DATE
- 未来=今天<起始日期
- 过期= END_DATE <今天
成员表
id--------membership_number--------start_date-------------end_date
1--------**123**--------------------------------09-20-2014-----------09-20-2015
2--------**123**--------------------------------09-20-2015-----------09-20-2016
3--------**123**--------------------------------09-20-2016-----------09-20-2017
4--------**123**--------------------------------09-20-2017-----------09-20-2018
5--------**456**--------------------------------09-20-2013-----------09-20-2014
6--------**456**--------------------------------09-20-2014-----------09-20-2015
会员卡
id--------membership_id-------------start_date-------------end_date
1--------**1**--------------------------------09-20-2014-----------05-15-2015
2--------**1**--------------------------------09-20-2014-----------09-20-2015
3--------**2**--------------------------------09-20-2015-----------05-13-2016
4--------**2**--------------------------------09-20-2015-----------09-20-2016
5--------**3**--------------------------------09-20-2016-----------09-21-2016 (past)
6--------**3**--------------------------------09-20-2016-----------05-15-2017
7--------**3**--------------------------------09-20-2016-----------09-20-2017
8--------**4**--------------------------------09-20-2017-----------05-13-2017
9--------**4**--------------------------------09-20-2017-----------09-20-2018
10-------**5**--------------------------------09-20-2013-----------05-13-2014
11-------**5**--------------------------------09-20-2013-----------09-20-2014
12------**6**--------------------------------09-20-2014-----------05-13-2015
13-----**6**--------------------------------09-20-2014-----------09-20-2015
我想要检索
- 所有活动+未来会员+(如果有一个特定的会员号码,最后期满的记录没有活动的或未来的成员)
其结果是:
id--------membership_number--------start_date-------------end_date
3--------**123**--------------------------------09-20-2016-----------09-20-2017
4--------**123**--------------------------------09-20-2017-----------09-20-2018
6--------**456**--------------------------------09-20-2014-----------09-20-2015
- 有效卡+(如果成员资格已过期,都绑到会员卡)
结果:
id--------membership_id-------------start_date-------------end_date
6--------**3**--------------------------------09-20-2016-----------05-15-2017
7--------**3**--------------------------------09-20-2016-----------09-20-2017
8--------**4**--------------------------------09-20-2017-----------05-13-2017
9--------**4**--------------------------------09-20-2017-----------09-20-2018
12------**6**--------------------------------09-20-2014-----------05-13-2015
13-----**6**--------------------------------09-20-2014-----------09-20-2015
每个表包含约20万条记录。我正在尝试使用单个MySQL查询使用UNION执行第二个查询(对于member_cards)。有没有更好的方法?
UNION结合了两个表并对它们进行排序,我认为UNION ALL的速度更快,因为它不排序组合的表。 [来源](http://www.iheavy.com/2013/06/13/how-to-optimize-mysql-union-for-high-speed/) – Roy123
一个查询不返回两个结果集,所以你的问题目前尚不清楚。 –
啊,我的不好。我的意思是第二个结果(对于会员卡)。 –