2010-07-21 64 views
2

我如何設計匹配系統的表格,如下所示:匹配系統的表格設計

我們有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 
) 

我能想到的唯一的辦法是遍歷所有的產品,在循環獲取它們的屬性,並與源產品進行比較。但這看起來不太有效。

回答

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; 

這是爲了獲得與您的原始產品具有最多共同特性的產品。

+0

+1 - 我剛剛發佈了相同的內容,然後刷新以檢查是否有其他人發佈了任何內容。 – TheCloudlessSky 2010-07-21 12:58:15

+0

糟糕;在那裏做了一個ups;應該有一個條款,以消除列表中的原始產品... – 2010-07-21 13:15:11

+0

@ TheCloudlessSky - 也許你應該把你的答案反正。我認爲我們可能會過分擔心本網站的快速回答,可能會以犧牲正確性爲代價,因爲我在查詢中輸入的錯誤往往會顯示出來。 – 2010-07-21 13:19:19