微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – 获取所有不同的用户 – MySql

我有一个表包含以下类型和信息.

product_id | user_id | product | date_opened
1          |   10    |   shoes |  2016-04-01
2          |   26    |   shoes |  2016-04-01
3          |   10    |   watch |  2016-04-01
4          |   23    |   shoes |  2016-04-01
5          |   10    |   shoes |  2016-01-01
6          |   13    |   watch |  2016-01-01
7          |   14    |   shoes |  2015-11-02
8          |   10    | slippers|  2015-11-02
9          |   10    |   shoes |  2015-11-02
10         |   15    |   watch |  2015-11-02
11         |   19    |   watch |  2015-09-03
12         |   19    |   watch |  2015-03-02
13         |   19    |   shoes |  2015-01-03

用户可以在开放时购买产品. date_open是日期周期.用户可以购买他想要的产品,例如user_id 10,用户10在2016-04-01周期有2个产品. 2016-01-01的一个产品,2015-11-02的两个产品.

现在,我想获得所有(不同的)user_id,他们在所有之前的3个周期日期(2016-04-01,2016-01-01和2015-11-02)都有活跃/有产品.

请注意,用户可以在一个周期中拥有许多产品.

额外:
有效 – 应该在3个设定日期连续生产产品而不跳过.
因此,它应该在2016-04-01和2016-01-01和2015-11-02日期向所有用户显示产品.不是仅在1或2个日期的产品用户.

这里的另一个问题:例如,我有不同日期的用户(2000-04-05,2001-09-03,2006-09-01,2015-11-02等等.)我只想得到这里所有的那些有日期的用户(‘2016-04-01′,’2016-01-01′,’2015-11-02’).

解决方法:

sql将为您提供在前三个周期日期内具有产品的不同用户

SELECT USER_ID
FROM   YOUR_TABLE OUTER_TABLE
WHERE  3 = (SELECT COUNT(disTINCT DATE_OPENED)
            FROM   YOUR_TABLE INNER_TABLE
            WHERE  DATE_OPENED IN ('2016-04-01', '2016-01-01', '2015-11-02')
            AND    OUTER_TABLE.USER_ID = INNER_TABLE.USER_ID);

如果重写如下,该语句可能更快(未经测试):

SELECT disTINCT USER_ID
FROM   YOUR_TABLE OUTER_TABLE
WHERE EXISTS (SELECT 1
              FROM   YOUR_TABLE INNER_TABLE
              WHERE  OUTER_TABLE.USER_ID = INNER_TABLE.USER_ID
              WHERE  DATE_OPENED = '2016-04-01')
AND EXISTS   (SELECT 1
              FROM   YOUR_TABLE INNER_TABLE
              WHERE  OUTER_TABLE.USER_ID = INNER_TABLE.USER_ID
              WHERE  DATE_OPENED = '2016-01-01')
AND EXISTS   (SELECT 1
              FROM   YOUR_TABLE INNER_TABLE
              WHERE  OUTER_TABLE.USER_ID = INNER_TABLE.USER_ID
              WHERE  DATE_OPENED = '2015-11-02');

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐