2012-08-23 98 views
1

我在啓動此想法時遇到問題。我有一個SQL數據庫和一個帶有JAVA/Apache(tomcat)的html接口。我試圖製作一個簡單的數據庫,用於對歌曲名稱進行排序,並與關於歌曲的關鍵字進行匹配。 例如,我輸入了像「史詩,電影,女王,唱歌」這樣的關鍵字,而像波西米亞女王狂想曲這樣的歌曲符合大部分標準,它是從「電影」中演繹的「史詩」歌曲,由「女王」一個值3. ,並在數據庫中的一首歌曲,如皇后我們是冠軍將滿足所有關鍵字(史詩,電影,女王,歌唱) - >因此,這首歌曲將是一個4.排名在SQL中關鍵字的搜索結果

我已經dabbled與計數函數在SQL和一些JAVA代碼,但我無法找到一種方法來轉移通過關鍵字,或計數他們看看哪個結果更好。

我應該在哪裏學習如何製作這樣的東西?


非常感謝您的解釋和鏈接。經過數小時的閱讀和重讀,我對數據庫結構有了更多的瞭解。並有一個功能齊全的網頁。我還有最後一個問題。查詢給了我song_ID和計數的結果。我想到了一些讓歌曲名稱也可以顯示的方法。

我的第一個想法是將名稱添加到聯結表中。

第二個是創建一個臨時表(視圖),然後使用該信息從其他表中查找數據。

3rd是寫了一個java代碼取得原始結果,然後只顯示歌曲的名稱和數量。 ...

我想我錯過了一些簡單的SQL能力來更好地(更有效地)處理數據。

+2

開始於:http://en.wikipedia.org/wiki/First_normal_form – barrowc

回答

1

比方說,你的數據庫中有兩列:標籤和song_id,因爲這樣的:如果你想更復雜的文本搜索

SELECT song_id, count(*) 
FROM tags 
WHERE tag IN ("epic", "movie", "queen", "sing") 
GROUP BY song_id 
ORDER BY count(*) DESC; 

CREATE TABLE tags(tag STRING KEY, song_id INT); 

然後,你可以在SQL查詢中所做的一切,即如果這個解決方案結果太慢,你應該看看Apache Lucene和/或Solr

+0

我認爲困擾的概念我不抓住如何搜索來自不同song_id('s)的多個標籤。這是我的建議。問題是我沒有看到在SQL中使用逗號分隔符或分隔符作爲字符串的任何方式,或者看看如何使它在java中運行而不需要獲取數據並將其轉換爲物理txt文件。必須有一項工作,我不瞭解數據庫。有什麼建議麼 ? – whatkai

+0

CREATE TABLE tags3(tag VARCHAR2(100),song_id INT,PRIMARY KEY(tag)); SELECT song_id,COUNT(*)FROM tags3 WHERE標記IN( '史詩', '皇后', '痛', '鼠') GROUP BY song_id ORDER BY COUNT(*)DESC; INSERT INTO tags3(song_id,tag) VALUES(1,'epic pain'); INSERT INTO tags3(song_id,tag) VALUES(2,'total queen'); INSERT INTO tags3(song_id,tag) VALUES(3,'史詩皇后'); INSERT INTO tags3(song_id,tag) VALUES(4,'皇后史詩'); INSERT INTO tags3(song_id,tag) VALUES(5,'pain'); – whatkai

0

三個表:

  • 歌曲具有主鍵song_id是一個整數
  • 標籤用的tag主鍵它是一個字符串
  • 歌曲標籤是一種junction table鏈接的另外兩張桌子。這將有song_id複合主鍵和tag

因此,如果歌曲我們有這些行(tuples):

  • song_id:1;名字:波希米亞狂想曲
  • song_id:2;名稱:我們是冠軍

,並在標籤中我們有:

  • 標籤:史詩
  • 標籤:電影
  • 標籤:女王
  • 標籤:唱

然後在歌曲標籤中我們會有:

  • song_id:1;標籤:史詩
  • song_id:1;標籤:電影
  • song_id:1;標籤:女王
  • song_id:2;標籤:史詩
  • song_id:2;標籤:電影
  • song_id:2;標籤:女王
  • song_id:2;標籤:唱歌

現在找到匹配特定標籤的歌曲只是從歌曲標籤表中選擇相關行的問題。

您的原始設計存在的問題是您將多個標籤存儲在一行中。相反,您應該爲與給定歌曲匹配的每個標籤分別設置一行。如果三個標籤匹配,那麼你需要三行,依此類推。

您可能需要閱讀一些關於database normalization理解爲什麼你原來的設計沒有在喬·K公司的較早前的答覆工作,有效

(NB他基本上認爲同樣的事情,給你的SQL查詢,以確定哪些標籤匹配哪些歌曲,我剛剛充實了一些東西)