2009-11-07 39 views
0

我正在爲客戶建立一個EC系統,這個客戶正在銷售二手產品。我的DB計劃大致是這樣的電子商務,產品和股票如何頁面

+-------------+ +-------------+ +-------------+ 
| Category | | Product  | | Stock  | 
+-------------+ +-------------+ +-------------+ 
| category_id | | category_id | | stock_id | 
| path  | | product_id | | product_id | 
+-------------+ +-------------+ +-------------+ 

一個產品類別內,A股是一個產品的項目,股價也包含特定信息:股票串口,狀態(完好,有點破,垃圾)。

現在我需要做一個頁面顯示有庫存產品在每個類別爲例這樣的事情:

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 

由於用戶可以瀏覽類別的第一級我需要添加某種尋呼系統或者頁面會變得太長,服務器將無法加載。

我最初的計劃是拉出類別和子類別中的所有產品,這些產品會有庫存並對該查詢執行限制。當我得到這些產品時,我會執行n個查詢來獲得實際的庫存行。

由於良好的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 

我會做這樣的

SELECT * FROM stock s WHERE s.sell = 1 AND s.product_id = pulledid 

所以來到這裏,我的問題10個查詢後,有沒有更好的方式來做到這一點?你可以在這種方式的一些流量(不要放縱,我知道這真的是一個天真的方法,但我不能與其他東西來)

它會更聰明的限制股票?知道頁面會有一些動態的html(也許是ajax)來組合一些價格相同的html。

是更好地顯示: - 一個產品,所有的股票(在大多數情況下,它不會被更多然後5項) - 頁面通過股票,這意味着產品A可能是第1頁和第2頁。

如果有人有建立這種系統的經驗,並可以給我一些反饋,我將不勝感激。

回答

1
  1. 爲什麼要獲取產品ID,然後分別使用它們來查詢庫存表?似乎你可以加入股票表。
  2. 使用您的設計,如果給定產品ID有多個庫存項目,您將獲得超過10行。
  3. 目前還不清楚你將如何獲得下一頁的下10頁。你需要一種方法來選擇下一個10開始。

正常的方式,我會構建這樣的問題,這將創建一個查詢,列出所有的結果。您可以通過將股票表加入您的初始查詢來完成此操作。要使分頁工作成功,請在輸出中設計一列或一組列,以便與輸出中所需的排序相對應,然後爲此添加一個order by子句。這個集合應該是唯一的。在你的情況下,它可能是產品ID,庫存ID和唯一庫存標識符,如自動增量列或時間戳。然後,您可以將第一頁查詢限制爲頁面大小。對於下一頁,只選擇那些唯一值大於最後一頁上最後一個的記錄。在你的情況下,你會使用多列,所以你可能無法以這種方式進行查詢。另一種方法是爲頁面2選擇2頁的值,但丟棄第一頁並顯示第二頁。

想法是,對於每個頁面,您將按相同的順序選擇相同的整組記錄,但會顯示不同的子集。

+0

@Loomis:謝謝你的回答。就像我懷疑它是更好的頁面上的股票,唯一的問題,我可以看到他們有一個300股票(只有這一個)的特殊產品,所以這個類別會產生一個瘋狂的頁數......但我想我不能真的幫助它! – RageZ 2009-11-07 07:28:36

+0

也越來越多,然後10個股票不是一個問題,只是得到每頁正常數量的項目,如果這個數字不總是不一樣的那就好了 – RageZ 2009-11-07 07:29:57

相關問題