2011-06-09 103 views
0

我正在開發一個拍賣網站。每次拍賣都有很多選項,我希望能夠在前端進行過濾。mysql保存並選擇很多選項

我想知道什麼是處理/存儲這些選項(主要是布爾/複選框)的最佳做法。

  • 最好的做法是將它們全部存儲在同一行中?
  • 或者最好是將它們全部存儲在一個「auction_options」表中?

我想最後的選擇是最好的one..but如何將一個查詢看起來像到: 選擇具有所有拍賣:

  • 狀態俄亥俄州
  • 狀態猶他
  • 一些其他選項

我只是不能得到我的頭。這甚至有可能嗎?

編輯 - >發表評論領域是不夠的

我創建3代表的答覆:

  • 拍賣表 - > A_ID | a_desc | etc
  • a_options table - > a_o_id | a_o_name | a_o_value
  • a_options2auction table - > id | a_id | a_o_id

當我運行此查詢:爲A INNER JOIN a_options2auction爲B ON A.a_id = B.a_id INNER JOIN a_options如C ON B.

SELECT * FROM拍賣a_o_id = C.id WHERE c.value = 'GRONINGEN' OR c.value = '烏德勒支'

它返回2行時,都具有相同拍賣,這不應該是可能的:)

+0

我建議閱讀一些關於數據庫設計的基本資源。也許首先看看維基百科:http://en.wikipedia.org/wiki/Database_design – Ham 2011-06-09 11:00:49

回答

0

您可以使用連接M-N的options表到auctions表。

在這兩張表之間,你應該建立另一張表來連接它們。

Auctions 
    | 
Auctions_options 
    | 
Options 

所以查詢會是這樣

SELECT * FROM Auctions as A 
INNER JOIN Auctions_Options as B ON A.id_auction = B.id_auction 
INNER JOIN Options as C ON B.id_Option = C.id_Option 
WHERE C.Option_name = 'State' AND (B.value = 'ohio' OR B.value='utah' OR B.value = '...') 

這個解決方案讓您infinites選項添加到拍賣和存儲他們的價值(每次拍賣可以從其他人也不同選項)

+0

我想這是我所追求的。我真的需要2個表格作爲選項嗎?是不是有可能擁有一個這樣的密鑰對值表? option_id - option_auction_id - option_name - option_value。或者這會給我尋找問題? – PinkFloyd 2011-06-09 12:55:24

+0

我沒有很好地理解你的問題,但只使用2個表格就會讓你需要用不同的ID插入「相同」選項,只通過名稱來標識選項,這意味着數據庫可能存在不一致(如果你插入一個名爲'test'的選項並且與'tEsT'相同,但您需要處理這些情況)。此外,查詢會更重的系統 – VAShhh 2011-06-09 13:03:10

+0

嗯..我剛剛試過這@家。但是,當我做一個MySQL查詢它是因爲不同的選項返回重複的行?你能給我一個示例表設置嗎? – PinkFloyd 2011-06-09 15:37:49

0

關於第二個問題(「如何將一個查詢的樣子來。」)這應該是你在找什麼:

SELECT * FROM auctions WHERE state=ohio OR state=utah 

我不你真的明白了第一個問題......請你清楚一點嗎? 無論如何,給定一個表'拍賣'我會存儲每一個拍賣與其所有數據(所以我猜這是你的意思是布爾/複選框)在這裏..

但這一切都取決於什麼樣的'數量和品味!如果您需要存儲拍賣'參與者'選項,然後創建另一個與外鍵id字段鏈接的'partecipants'到您的'拍賣'表中。

您可能需要使用INNER JOIN

0

第二個選項是更好的 - 沒有必要填寫不必要的字段。它只會存儲拍賣所需的選項。

按查詢:

SELECT 
    * 
FROM 
    Auctions 
WHERE state_id in (1, 2) 

的STATE_ID將來自一些的複選框。