2012-07-08 137 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所以它不会令人感到意外没有匹配。当然,除非你在你的问题中错误地输入了一些值 - 你应该这样改写你的问题

相关问题