电子商务,产品和股票如何分页

时间:2009-11-07 05:34:07

标签: php database e-commerce

我正在为客户建立一个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页。

如果有人有建立这种系统的经验并且可以给我一些反馈,我将不胜感激。

1 个答案:

答案 0 :(得分:1)

  1. 为什么要获取产品ID,然后单独使用它们来查询库存表?看起来你可以加入股票表。
  2. 如果给定产品ID的库存中有多个商品,则使用您的设计将获得超过10行。
  3. 目前尚不清楚如何获得下一页的下一页10。你需要一种方法从下一个10开始选择。
  4. 我将构建这样的问题的正常方法是创建一个列出所有结果的查询。您可以通过将stock表加入初始查询来完成此操作。要使分页工作,您需要在输出中设置一列或一组列,这些列对应于输出中所需的排序,然后为其添加order by子句。这个集合应该是唯一的。在您的情况下,它可能类似于产品ID,库存ID和唯一的库存标识符,如自动增量列或时间戳。然后,您可以将首页查询限制为页面大小。对于下一页,仅选择那些唯一值大于最后一页上最后一个值的记录。在您的情况下,您将使用多个列,因此您可能无法以这种方式查询。另一种方法是为第2页选择2页值,但扔掉第一页并显示第二页。

    我们的想法是,对于每个页面,您以相同的顺序选择相同的整个记录​​集,但显示不同的子集。