我正在构建一个类似 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' 表中有一个新列,该列具有匹配的 attribute_ids 序列化 - 但是这不利于优化(例如,它会比当前方法慢)