mysql保存并选择许多选项

时间:2011-06-09 10:51:08

标签: mysql

我正在开发一个拍卖网站。每次拍卖都有很多选项,我希望能够在前端进行过滤。

我想知道处理/存储这些选项的最佳做法是什么(主要是布尔/复选框)。

  • 最佳做法是将它们全部存储在同一行吗?
  • 或者将它们全部存储在一个“auction_options”表中会更好吗?

我猜最后一个选项是最好的..但是查询的外观如何: 选择所有拍卖:

  • state ohio
  • 犹他州州。
  • 其他选项

我无法理解这一点。这甚至可能吗?

编辑 - >对评论字段的回复还不够

我创建了3个表:

  • 拍卖表 - > a_id | a_desc |等
  • a_options表 - > a_o_id | a_o_name | a_o_value
  • a_options2auction表 - > id | a_id | a_o_id

当我运行此查询时:

  
    

SELECT * FROM拍卖为A.     INNER JOIN a_options2auction为B ON A.a_id = B.a_id     INNER JOIN a_options为C ON B.a_o_id = C.id     在哪里c.value ='groningen'OR c.value ='utrecht'

  

它返回两行,这两行都是相同的拍卖,这是不可能的:)

3 个答案:

答案 0 :(得分:0)

对于你的第二个问题(“查询将如何......”),这应该是你正在寻找的:

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

我真的不明白第一个问题。你能说清楚吗? 无论如何,如果有一个表'拍卖',我会在每一次拍卖中存储所有数据(所以我想这就是你对布尔/复选框的意思)。

但这一切都取决于您存储的“选项”类型,数量和您的品味!例如,如果您需要存储拍卖'参与者'选项,那么请创建另一个与外键ID相关联的表'partecipants' -fields到你的'拍卖'表。

您可能想要使用INNER JOIN

答案 1 :(得分:0)

第二种选择更好 - 无需填充不必要的字段。它只会存储为拍卖而结合的选项。

根据查询:

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

state_id将来自一些复选框。

答案 2 :(得分: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 = '...')

此解决方案允许您为拍卖添加无限选项并存储其价值(每次拍卖也可以与其他拍卖有不同的选项)