我對SQL非常不滿,我想知道我可以運行哪些SQL來解決下面我懷疑是NP-Complete問題的問題,但我是確定查詢需要很長時間才能運行大型數據集,因爲這將作爲後臺任務完成。一個標準的sql語句是首選,但如果需要存儲過程,那就這樣吧。 SQL需要在Postgres 9.3上運行。SQL查詢查找具有最匹配關鍵字的行
問題:給定一組包含一組關鍵字的文章,找到包含最多匹配關鍵字的每篇文章的前n篇文章。
一個下調的文章表的版本是這樣的:
CREATE TABLE article (
id character varying(36) NOT NULL, -- primary key of article
keywords character varying, -- comma separated set of keywords
CONSTRAINT pk_article PRIMARY KEY (id)
);
-- Test Data
INSERT INTO article(id, keywords) VALUES(0, 'red,green,blue');
INSERT INTO article(id, keywords) VALUES(1, 'red,green,yellow');
INSERT INTO article(id, keywords) VALUES(2, 'purple,orange,blue');
INSERT INTO article(id, keywords) VALUES(3, 'lime,violet,ruby,teal');
INSERT INTO article(id, keywords) VALUES(4, 'red,green,blue,yellow');
INSERT INTO article(id, keywords) VALUES(5, 'yellow,brown,black');
INSERT INTO article(id, keywords) VALUES(6, 'black,white,blue');
這將導致這對SELECT * FROM article;
查詢:
Table: article
------------------------
id keywords
------------------------
0 red,green,blue
1 red,green,yellow
2 purple,orange,blue
3 lime,violet,ruby,teal
4 red,green,blue,yellow
5 yellow,brown,black
6 black,white,blue
假設我想找到的前3篇每條包含最多匹配關鍵字的文章,那麼輸出應該是這樣的:
------------------------
id related
------------------------
0 4,1,6
1 4,0,5
2 0,4,6
3 null
4 0,1,6
5 1,6
6 5,0,4
您應該**從不**將逗號分隔值存儲在單個列中。如果您規範化模型,查詢變得非常簡單。 –
如果需要的話,我可以把關鍵字分割到自己的表中。這只是我懶惰得到這個工作的結果。 –
你應該。您還在限制您的關鍵字,如果您的關鍵字名稱很長,該怎麼辦?將有一個大的表現增加。 –