我正在为客户建立一个EC系统,这个客户正在销售二手产品。我的数据库方案大致是这样的
+-------------+ +-------------+ +-------------+
| Category | | Product | | Stock |
+-------------+ +-------------+ +-------------+
| category_id | | category_id | | stock_id |
| path | | product_id | | product_id |
+-------------+ +-------------+ +-------------+
产品在一个类别中,股票是一个产品的一个项目,该股票还包含特定信息:股票序列,状态(良好状态,有点破碎,垃圾)。
现在我需要制作一个页面来显示每个类别的库存产品,例如:
TV (big category)
LCD (small category)
SONY super LCD 22'' <- product
Stock 1
Stock 2
Stock 3
Sony super LCD 24''
.... etc ...
PLASMA (category)
Hitachi bla bla plasma
Stock 1
Stock 2
Stock 3
由于用户可以浏览第一级别的类别,我需要添加某种分页系统,否则页面会变得太长,服务器将无法加载。
我最初的计划是提取类别和子类别中的所有产品,这些产品会有库存并对该查询进行限制。当我得到这些产品时,我会进行多次查询以获得实际的库存行。
因为好的SQL查询比长解释
更好SELECT * FROM category c JOIN product p ON c.category_id = p.category_id
WHERE c.deleted = 0
AND p.deleted = 0
AND (c.category_id = 37 or c.path LIKE '/1/37/%')
AND (SELECT count(*) FROM stock s WHERE s.product_id = p.product_id AND s.sell= 1) != 0
LIMIT 10
之后我会做10个这样的查询
SELECT * FROM stock s WHERE s.sell = 1 AND s.product_id = pulledid
所以这里有我的问题,有没有更好的方法呢?你可以用这种方法流动吗(不要放纵我知道这真的是一种天真的方法,但我不能带来别的东西)
限制库存会更聪明吗?知道该页面会有一些动态的html(可能是ajax)来组合一些具有相同价格的内容。
显示更好: - 一种产品和所有库存(在大多数情况下,它不会超过5项) - 按库存分页,这意味着产品A可以在第1页和第2页。
如果有人有建立这种系统的经验并且可以给我一些反馈,我将不胜感激。
答案 0 :(得分:1)
我将构建这样的问题的正常方法是创建一个列出所有结果的查询。您可以通过将stock表加入初始查询来完成此操作。要使分页工作,您需要在输出中设置一列或一组列,这些列对应于输出中所需的排序,然后为其添加order by子句。这个集合应该是唯一的。在您的情况下,它可能类似于产品ID,库存ID和唯一的库存标识符,如自动增量列或时间戳。然后,您可以将首页查询限制为页面大小。对于下一页,仅选择那些唯一值大于最后一页上最后一个值的记录。在您的情况下,您将使用多个列,因此您可能无法以这种方式查询。另一种方法是为第2页选择2页值,但扔掉第一页并显示第二页。
我们的想法是,对于每个页面,您以相同的顺序选择相同的整个记录集,但显示不同的子集。