我有2张桌子。

第一个表存储产品。

id I Product Name
1  I Apple
2  I Bread
3  I Butter
... Many more


第二张表存储了带有日期的整体购买

product_id I purchasedoverall I date
1          I 2                I 1.2.14
1          I 10               I 3.2.14
3          I 3                I 4.2.14
... Many more


注意:在此示例中,以1.2.14 2个苹果的价格出售,在3.2.14处又有8个苹果,因此购买的全部中有10个存储。

我想要的数据库是:
请把上周购买的产品给我,按上周购买的数量排序。

到现在为止,我以这种(不良)方式进行操作:


我得到所有产品

SELECT * FROM products



将它们存储在数组中


我遍历数组以获取上周的购买数量

SELECT MAX(c.purchasedoverall)-MIN(c.purchasedoverall) as purchased
FROM products as a, puchased as c
WHERE c.product_id = {product-id from the array}
      AND c.date >= NOW() - INTERVAL 1 WEEK
ORDER BY c.date

我将数组进行排序


我的问题:我可以使用一个MySQL查询吗?

最佳答案

假设pr.name是唯一的:

   SELECT pr.name,
          COALESCE(MAX(pu.purchasedoverall)-MIN(pu.purchasedoverall),0) purchased
     FROM products pr
LEFT JOIN purchased pu
       ON pu.product_id = pr.id
      AND pu.date > CURDATE() - INTERVAL 1 WEEK
 GROUP BY pr.name
 ORDER BY purchased DESC, pr.name


但是,正如注释中所指出的那样,您实际上应该以所需的分辨率存储数据,而不是执行复杂的查询来提高分辨率。

无论获得数据结构和相关代码有何困难,几乎可以肯定,重构它比在有缺陷的设计之上构建系统要容易得多。

关于mysql - 取得上周按购买顺序订购的已售商品,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25669277/

10-13 06:45