我有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/