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

标签 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 组 dates 中连续有产品并且没有跳过。 因此它应该向所有用户显示日期为 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');

关于php - 获取所有不同的用户 - MySql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37937687/

相关文章:

mysql - 多语言数据库 - 获取所有语言的帖子

php - 按级别对行进行分组并为每个行命名

java - 构建安卓应用 :I can sending data to database in localhost but not the same in online database

php - 如何查找字符串中字符出现的数组

处理大字符串时 PHP 脚本停止工作

mysql - 在 Jooq 中集成 Hikari Pool

mysql 外键错误 150

php - 将 MySQL 中的数据显示到 bootstrap 模式中(无 ajax)

php - 如何检测客户端机器上的打印机?

php - Codeception - 无法在 Firefox 中保存和加载 session 快照