2009-07-18 21 views
0

我正在使用PHP的MySQL應用程序店面應用程序。目前我正在將數據存儲在4個表格中:一個用於產品線,一個用於這些產品線中的特定產品,一個用於產品圖像,另一個用於指定哪些圖像與哪些特定產品相關聯。每個特定產品屬於一個產品線,每個產品圖像可以屬於幾個特定產品,並且每個特定產品可以具有多個圖像。我的桌子是這樣的:我應該如何存儲在線商店的產品和產品圖像數據?

ProductLines 
    id, name, description, etc. 
SpecificProducts 
    productLineID 
    id, color, size, etc. 
ProductImageLinks 
    specificProductID 
    imageID 
Images 
    id, imageFileLocation, name, etc. 

它的工作方式很好,但它似乎不是很有效的檢索目的。

例如,我有一個頁面,其中列出了每條產品線以及該產品線中隨機選擇的圖像的縮略圖。爲此,我必須首先查詢數據庫以獲取所有產品線的列表,然後分別查詢每個產品線,以獲取具有關聯圖像的所有特定產品,選擇其中一個,然後再次查詢獲取圖像。

我考慮過的另一種可能性是使用一個查詢來獲取我正在查看的所有產品線,第二個查詢爲所有這些產品系列獲取所有特定產品,第三個查詢獲取所有產品線指定哪些圖像鏈接到哪些特定產品的圖像鏈接,以及獲取所有這些圖像的第四個查詢。我想這會因爲查詢數量減少而變得更快一些,但是它會爲PHP做很多工作來確定產品線和產品與圖像之間的聯繫,這可能會很慢。

所以我的問題是,有沒有更好的方式來存儲這些數據?或者更好的方法來檢索它基於我已經有的數據庫?或者是我確定的兩個選項之一真的是我最好的選擇?

編輯:我實際上並沒有將圖像文件存儲在數據庫中。圖像文件存儲在文件系統中。我的數據庫中的「圖像」表只存儲圖像文件的位置以及圖像標題,替代文字等有用信息。

+0

何時檢索圖像?在瀏覽器請求它之前不需要獲取它 - 因此提取圖像不應該是構建該頁面的一部分 - 只應在html中插入一個鏈接 – nos 2009-07-18 21:02:38

+0

「image」我只是表示圖像的數據結構。我實際上並沒有檢索圖像文件,只是數據庫中的數據告訴我圖像文件的URL以及像alt文本這樣的有用信息。對不起,不清楚。 – Robert 2009-07-18 21:25:52

回答

2

是 - 只寫一個查詢,將一次檢索所有信息。

我對此有點生疏,但你可以在mysql參考中查詢查詢。

  1. 創建連接上適當的鍵這些表
  2. 您需要選擇從蘭德公司(檢索圖片爲特定的查詢,然後爲了子查詢的第一項)查詢並選擇第一。

這絕對可以在單個查詢中完成。即使它不能,你總是可以創建視圖,這有時是更好的方式來組織你的查詢,使它們更具可讀性。換句話說,不是返回查詢結果,而是創建一個與您的第一個查詢相對應的視圖。然後創建一個視圖,對應於對第一個查詢的結果運行第二個查詢,該視圖在視圖之外運行。等等。然後,通過從最終視圖中檢索,您的實際查詢可以一次完成。

+0

因此,如果我正確理解您的觀點,那麼在我的一個大查詢結果中,每行都會包含產品線所需的所有列,來自該行的特定產品以及特定產品的縮略圖。 – Robert 2009-07-18 21:34:54

0

您是否設置了將圖像存儲在mysql數據庫中?

在我的類似應用程序中,我簡單地將圖像存儲在/images/productimages/imagesize/productid.jpg中,對於不同的縮略圖大小和製作,其圖像大小爲「小」,「大」等。jpg是SpecificProducts表中的id

+0

我在之前的類似項目中是這樣做的,但是該技術無法處理特定產品和圖像之間的多對多關係。 – Robert 2009-07-18 21:37:20

1

就數據庫設計而言,您有一個相當穩定(和標準)的設計。只要它是1:1關係來保存一些查詢,您就可以將您的ProductImageLinks和Images表結合起來。

至於你的產品線圖像檢索,你有一對夫婦,將大大減少所需查詢的數量的選項:

  1. 在你的數據庫稱爲ProductLineImages創建新表。不是從相關產品中隨機選取圖像,而是在其中加載一組圖像,您可以從中隨機選擇。它不會像這樣動態,但這是最有效的方法。
  2. 您可以在單個查詢中進行所有描述(但效率低於#1)。
相關問題