【发布时间】:2013-06-22 00:07:06
【问题描述】:
我正在构建一个类似于 AJAX 的搜索页面,它允许客户选择一个数字过滤器来缩小搜索范围。例如,用户选择了“iPhone 5”并具有额外的容量(32GB、64GB)和颜色(黑色、白色......)过滤器。
用户只能为每个类别选择一个单选框(因此他们可以选择 32GB 和黑色).. 但他们无法选择(32GB 和 64GB 和黑色,因为其中两个属于“容量”类别)。
我已经在 sqlfiddle 上添加了架构(请忽略我已经删除了它们存在于适当应用程序中的主键,它们刚刚与其他一些字段/数据一起被删除以最小化 sqlfiddle)
http://sqlfiddle.com/#!2/964425
任何人都可以建议创建查询以执行以下操作的最佳方法:
Get all the prices for device_id '2939' (iPhone 5) which has the 'attributes' of '32GB' AND 'Black'
我目前有这个 - 但这仅在选择单个属性时有效:
// search for device with '64GB' & 'Black' attributes (this currently doesn't return any rows)
SELECT `prices`.*
FROM (`prices`)
LEFT JOIN `prices_attributes` ON `prices_attributes`.`price_id` = `prices`.`id`
WHERE `prices`.`device_id` = '2939'
AND `attribute_option_id` = '19'
AND `attribute_option_id` = '47';
// search for device with '64GB' attribute only (this currently DOES return a row)
SELECT `prices`.*
FROM (`prices`)
LEFT JOIN `prices_attributes` ON `prices_attributes`.`price_id` = `prices`.`id`
WHERE `prices`.`device_id` = '2939'
AND `attribute_option_id` = '19';
任何关于数据库设计的建议也将不胜感激
注意:我正在考虑在 'prices' 表中创建一个新列,该列具有匹配的属性 ID 序列化 - 但是这不利于优化(例如,它会比当前方法慢)
【问题讨论】:
标签: mysql database database-design schema