2012-07-08 72 views
1

我有一個數據庫表設置關鍵字。列是 -使用SELECT * FROM col WHERE

keywordID | keyword1 | keyword2 |關鍵字3 | keyword4 |問題ID

我想通過網站爲用戶提供查找問題並編輯它的功能。我認爲目前最好的做法是讓用戶通過輸入關鍵字來搜索問題。當我使用

SELECT * FROM keywords WHERE keyword1="first_search_word" 

它的工作原理,但是當我嘗試相同的,但

WHERE keyword2="first_search_word" 

它不返回任何,即使它們的存在。我也嘗試使用OR(或||),但無法找到任何相關信息。

+2

所以..你有一個關於keyword1的列,當它用於與'keyword1'列比較時,而且你還有另外一列'ky2',但是當你使用'keyword2'時它不起作用。我想答案很明顯。使用'ky2'而不是'keyword2'。 – Daedalus 2012-07-08 00:18:14

+0

@connor做一個更具體和描述性的點點滴滴! – Razvan 2012-07-08 00:19:55

+2

讓keyword1到4的氣味像數據庫反模式,違反了第一範式。 – 2012-07-08 00:28:12

回答

4

keyword1與keyword1有什麼關係?

無論如何,這是不正確的方式來解決您的問題。聽起來你想要標籤,每個問題都可以與多個標籤相關聯,對嗎?這被稱爲多對多關係,需要多個表。你將需要:

  • 2列,標籤識別和標籤
  • 一個問題表,至少2列,questionId和A標籤表質疑
  • 一個tags_questions連接表2列,標籤識別和questionId。

要查找哪些問題具有特定標記,請首先在標記表中查找tagId。然後做一個SELECT questionId from tags_questions where tagId = $tagId。要根據關鍵字執行查找,而不是使用特定標籤,則可以執行SELECT questionId FROM tags_questions WHERE tagId IN (SELECT tagId FROM tags WHERE tag LIKE "%{$keyword}%")

+0

+1我懷疑keywordID是關鍵字表的唯一主鍵。我也同意這個要求需要一個多對多的關係。在你的例子中,你可以使用literal關鍵字而不是標籤來保持connor的關鍵字思維。 – HeatfanJohn 2012-07-08 00:29:19

1

當我使用

SELECT * FROM keywords WHERE keyword1="first_search_word"

它的工作原理,但是當我嘗試相同的,但

WHERE keyword2="first_search_word"

它不返回任何

但你也會說

列keywordID,關鍵字1,KY2,KY3,KY4,questionID

所以你不要確實有一個叫列keyword2所以它不會令人感到意外沒有匹配。當然,除非你在你的問題中錯誤地輸入了一些值 - 你應該這樣改寫你的問題

相關問題