不同订单统计的表结构

时间:2013-11-19 21:28:35

标签: mysql

我正在创建一个市场,我希望有这样的不同类型的统计数据:

  1. 产品更畅销
  2. 产品类别更畅销
  3. 购买该产品的用户甚至购买此产品
  4. 用户首选产品类别
  5. 用户最近的产品boughts
  6. 限制表的创建我正在考虑这个独特的表结构:

    CREATE TABLE IF NOT EXISTS `order_stats` (
      `id_order` int(11) NOT NULL,
      `id_product` int(11) NOT NULL,
      `id_seller` int(11) NOT NULL,
      `id_user` int(11) NOT NULL,
      `id_cat` int(11) NOT NULL,
      `id_subcat` int(11) NOT NULL,
      `id_type` int(11) NOT NULL,
      `date_ord` datetime NOT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    

    这个表结构是否足以获得之前写入统计信息类型所需的所有参数?

1 个答案:

答案 0 :(得分:0)

所有这些都可以通过您提出的表格结构来实现。我已经包含了示例查询 - 它们只返回ID,因为我对数据库中的其他表一无所知。我希望我已经理解了你想要查询的内容 - 如果没有,请告诉我。

<强> 1。产品更畅销

此查询显示购买的前10个产品

SELECT 
    COUNT(*), id_product 
FROM 
    order_stats
GROUP BY 
    id_product
ORDER BY 
    COUNT(*) DESC
LIMIT 10;

<强> 2。产品类别更畅销

此查询显示购买的前十大类产品

SELECT 
    COUNT(*), id_cat 
FROM 
    order_stats
GROUP BY 
    id_cat
ORDER BY 
    COUNT(*) DESC
LIMIT 10;

第3。购买此产品的用户甚至购买此产品

此查询显示同时购买产品ID 2的用户购买的产品的ID:

SELECT DISTINCT
    id_product
FROM
    order_stats
WHERE
    order_stats.id_user IN (SELECT id_user FROM order_stats WHERE id_product = 2)
AND
    order_stats.id_product != 2;

<强> 4。用户首选产品类别

此查询显示用户1购买的前10类产品:

SELECT
    COUNT(*), id_cat
FROM
    order_stats
WHERE
    order_stats.id_user = 1
GROUP BY 
    id_cat
ORDER BY
    COUNT(*) DESC
LIMIT 10;

<强> 5。用户最近的产品boughts

此查询显示用户1购买的10个最新产品:

SELECT
    id_product
FROM
    order_stats
WHERE
    order_stats.id_user = 1
ORDER BY 
    date_ord DESC
LIMIT 10;