【发布时间】:2014-07-16 13:51:07
【问题描述】:
我有三个数据库表:
products
(
product_id, name etc..
)
specifications
(
id_specification, name
)
product_has_specification
(
id_specification, product_id, specification_value
)
假设我有一件尺寸为 M 的 T 恤 (product_id = 1),它具有蓝色和更多属性。
我已经尝试加入三个表,并且值 = m AND value =blue 等。但是它没有显示任何结果。
我也尝试过像这样的子查询:
select distinct products.* from products
join product_has_specification on products.id = product_has_specification.product_id
join specifications on product_has_specification.spec_id = pecifications.id_specification
where
(
(specifications.name = 'color' and product_has_specification.value='black')
)
and products.id in
(
select products.id from products
left join product_has_specification on products.id = product_has_specification.product_id
left join specifications on product_has_specification.spec_id = specifications.id_specification
where
(specifications.name='size' and product_has_specification.value='s')
)
如果产品颜色为“黑色”且尺寸为“s”,则此选择有效,但是如果我有更多属性,假设 X 选择将太长。
选择会是什么样子? 有没有其他解决办法?
编辑:
我找到了解决办法。它很丑,但它可以完成工作。但是,如果一个产品有 10 个规格,那么查询很长。
SELECT products.*
FROM products
left JOIN product_has_specification ON products.id = product_has_specification.product_id
left JOIN specifications ON product_has_specification.id_specifiction = specifications.id_specification
WHERE products.id in (
SELECT products.id
FROM products
left JOIN product_has_specification ON products.id = product_has_specification.product_id
left JOIN specifications ON product_has_specification.id_specifiction = specifications.id_specification
where (product_has_specification.value = 'm') and products.id in
(
SELECT products.id
FROM products
left JOIN product_has_specification ON products.id = product_has_specification.product_id
left JOIN specifications ON product_has_specification.id_specifiction = specifications.id_specification
where (product_has_specification.value = 'black') and products.id in
(
SELECT products.id
FROM products
left JOIN product_has_specification ON products.id = product_has_specification.product_id
left JOIN specifications ON product_has_specification.id_specifiction = specifications.id_specification
where (product_has_specification.value = 'test')
)
)
)
group by products.id
将此查询调整为您想要的任意数量的规范。如果有人有更好的解决方案,请发布。
【问题讨论】:
标签: php mysql sql codeigniter select