我正在开发一个拍卖网站。每次拍卖都有很多选项,我希望能够在前端进行过滤。
我想知道处理/存储这些选项的最佳做法是什么(主要是布尔/复选框)。
我猜最后一个选项是最好的..但是查询的外观如何: 选择所有拍卖:
我无法理解这一点。这甚至可能吗?
编辑 - >对评论字段的回复还不够
我创建了3个表:
当我运行此查询时:
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'
它返回两行,这两行都是相同的拍卖,这是不可能的:)
答案 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 = '...')
此解决方案允许您为拍卖添加无限选项并存储其价值(每次拍卖也可以与其他拍卖有不同的选项)