我如何为匹配系统设计表格,如下所示:
我们有X产品,可以有Y属性。物业数量因产品而异,两种产品不必具有任何类似的特性。
我的首要目标是购买一种产品并找到最相似的产品。
通常我会做这样的事情:
create table products
(
id serial not null primary key,
name varchar(40)
)
create table properties
(
id serial not null primary key,
name varchar(40)
)
create table product_properties
(
product_id int not null,
property_id int not null
)
我能想到的唯一方法是遍历所有产品,在循环中获取它们的属性并与源产品进行比较。但这似乎不太有效。
答案 0 :(得分:2)
这样的事情会有什么帮助吗?
SELECT *
FROM products
WHERE id <> <given product id>
ORDER BY (SELECT COUNT(*)
FROM product_properties
WHERE product_properties.product_id = products.id AND
product_properties.property_id IN
(SELECT property_id
FROM product_property
WHERE product_id = <given product id>))
LIMIT 1;
这是为了获得与原始产品具有最相同属性的产品。