【问题标题】:mySQL JOIN three tables - Ecommerce items , views and salesmySQL JOIN 三个表 - 电子商务项目、视图和销售
【发布时间】:2017-10-10 18:57:49
【问题描述】:

我正在使用 php mySql 构建一个电子商务系统,但我不知道如何 LEFT JOIN 三个表。

我需要所有商店商品的列表,添加每个商品的浏览量和销售额

            TABLE #1 - store_sales
            ---------------
            itemID | date
            --------------

            TABLE #2 - store_views
            --------------
            itemID | date
            --------------

            TABLE #3 - store_items 
            ---------------------------------
            itemID | itemName 
            ---------------------------------

            RESULT
            -----------------------
            itemID | itemName | COUNT(store_sales) | COUNT(store_views)


            EXAMPLE:
            -----------------------
            itemID | itemName | COUNT(store_sales) | COUNT(store_views) 
            1         PHONE             3                   45 
            2         BOOK              5                   61

我的代码有错误:

            SELECT
            a.itemID    ,
            b.itemID    ,
            c.itemID    ,
            COUNT(if(a.itemID   = c.itemID  , a.itemID  , NULL)) AS views       ,
            COUNT(if(b.itemID   = c.itemID  , b.itemID  , NULL)) AS sales               

            FROM store_views a

            LEFT JOIN store_sales b
            ON a.itemID = b.itemID 

            LEFT JOIN store_items c
            ON a.itemID = c.itemID

            WHERE 1=1
            GROUP BY itemID 

【问题讨论】:

  • 你没有 store_sales 和 store_views 的主键吗?
  • 不,每次有人访问商店商品时,它都会使用商品 ID 和时间戳创建一条新记录。 store_sales 也是如此

标签: php mysql database join e-commerce


【解决方案1】:

您可以在子选择中分别获取销售和视图的计数,然后与您的项目表进行左连接,使用 COALESCE 跳过计数的空记录

SELECT
a.itemID ,
COALESCE(b.item_sales,0),
COALESCE(c.item_views,0)
FROM  store_items a
LEFT JOIN (
    SELECT itemID,COUNT(*) as item_sales
    FROM store_sales
    GROUP BY itemID  
) b ON a.itemID = b.itemID 
LEFT JOIN (
    SELECT itemID,COUNT(*) as item_views
    FROM store_views v
    GROUP BY itemID
) c ON a.itemID = c.itemID

【讨论】:

    猜你喜欢
    • 2013-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-14
    • 1970-01-01
    相关资源
    最近更新 更多