2011-06-09 101 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将来自一些的复选框。