2015-05-02 70 views
1

我不知道如果我的問題有着怎樣的名字,這樣我就可以進行搜索,但這裏是它無論如何: 我有一個圖片數據庫,非常簡單:數據庫結構:查找和標記相似的條目

ID | PicturePath | SomeMetaData

一些圖片非常相似,但不一樣。我希望能夠標記出來。舉例來說,如果PicA與PicB相似,它應該在某處寫下來。我已經完成了,只需創建另一個表:

ID1 | ID2

因此,如果我在該表中寫入PicA左側和PicB右側,我可以查詢該表的相似條目。到現在爲止還挺好。我的問題是,我將有很多這些連接,有時這些連接不限於兩張圖片。因此,例如PicA可能與PicB類似,但PicB也可能與PicC類似。如果我在顯示PicA時查詢我的第二張表,我只會得到一個與PicB類似的條目。我想要的不僅是找到PicB,還有PicC(它不直接連接到PicA)。 我希望你能理解。

我的問題是:

  • 什麼是那種問題最好的數據庫結構?

  • 如何查詢(通過SQL)所有連接的圖片?在我看來,這必須通過一種無盡的循環來完成...我真的不知道從哪裏開始。

非常感謝併爲我簡單的英語感到抱歉。

所有最優秀的 塞巴斯蒂安

+0

如果A與B類似,B與C類似,A與C類似嗎?如果是這樣,它會容易得多。但我不希望這種「傳遞性」必然適用於圖片。 –

回答

1

如果A是類似於B和B是類似於C,是一個類似於C?假設這是真的,我建議額外的表:

CREATE TABLE Similars (
    similar_id INT UNSIGNED AUTO_INCREMENT NOT NULL, 
    picture_id ..., 
    PRIMARY KEY(id), 
    INDEX(picture_id) 
) ENGINE = InnoDB; 

當你決定A是類似於B,看在Similars爲A或B;如果你發現這種情況,那麼確保A和B的條目與Similar_id相同。

步驟1
如果沒有在表中,添加其中之一,並獲得similar_id(見LAST_INSERT_ID())。
否則您將發現similar_id

第2步
插入另一個。

如果A和B都在不同的表格similar_ids中,它會變得更加混亂。

+0

謝謝!我想我明白了。但爲什麼一個AutoIncrement的similar_id?如果我找到另一個conncetion,我應該可以在該表中添加一個新的行,並使用現有的similar_id,否? – Sebastian

+0

正確。 'similar_id'將所有「相似」圖片連接在一起。如果你在不指定'similar_id'的情況下'INSERT',將會產生一個新的'AUTO_INCREMENT'值。添加另一張圖片時,指定'similar_id'將其與現有圖片綁定。 –

+0

當然!很好,謝謝! – Sebastian