【问题标题】:Using SELECT * FROM col WHERE使用 SELECT * FROM col WHERE
【发布时间】:2012-07-08 00:15:12
【问题描述】:

我为关键字设置了一个数据库表。列是 -

关键字ID |关键字1 |关键字2 |关键字3 |关键字4 |问题ID

我想通过网站为用户提供查找问题和编辑问题的功能。我认为目前最好的方法是让用户通过输入关键字来搜索问题。当我使用

SELECT * FROM keywords WHERE keyword1="first_search_word" 

它有效,但是当我尝试相同但

WHERE keyword2="first_search_word" 

它不会返回任何东西,即使它们存在。我也尝试使用 OR (或 || )但也找不到任何相关信息。

【问题讨论】:

  • 所以..你有一个keyword1列,它在用于与'keyword1'列进行比较时有效,你还有另一列'ky2',但是当你使用它时它不起作用使用'keyword2'..我认为答案很明显。使用“ky2”而不是“keyword2”。
  • @connor 更具体和更具描述性!
  • 关键字 1 到 4 听起来像是违反第一范式的数据库反模式。

标签: php mysql


【解决方案1】:

什么是keyword1与keyword1相关的keywordID?

无论如何,这不是解决问题的正确方法。听起来您想要每个问题都可以与多个标签相关联的标签,对吗?这称为多对多关系,需要超过 1 个表。您将需要:

  • 包含 2 列 tagId 和 tag 的 tags 表
  • 包含至少 2 列 questionId 和 question 的问题表
  • 带有 2 列 tagId 和 questionId 的 tags_questions 连接表。

要查找具有特定标签的问题,首先在标签表中查找 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}%")

【讨论】:

  • +1 我怀疑keywordID 是keywords 表的唯一主键。我也同意该要求需要多对多关系。在您的示例中,您可以使用文字关键字而不是标签来保持康纳的关键字思维。
【解决方案2】:

当我使用时

SELECT * FROM keywords WHERE keyword1="first_search_word"

它有效,但是当我尝试相同但

WHERE keyword2="first_search_word"

它不返回任何东西

但你也说

列是keywordID、keyword1、ky2、ky3、ky4、questionID

所以您实际上没有名为keyword2 的列,因此没有匹配项也就不足为奇了。当然,除非您在问题中输入错误的某些值 - 如果是这种情况,您应该重写您的问题

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-27
    • 1970-01-01
    • 2017-03-01
    • 2011-01-10
    • 2011-04-06
    • 1970-01-01
    相关资源
    最近更新 更多