【问题标题】:Search 2 Columns with 1 Input Field使用 1 个输入字段搜索 2 列
【发布时间】:2011-01-15 14:30:22
【问题描述】:

我有一个包含两列的数据库:名字姓氏。名字可以有多个单词。姓氏可以包含连字符。

有没有办法只用一个输入框搜索两列?

数据库

ID        `First Name`       `Last Name`
1          John Peter         Doe
2          John               Fubar
3          Michael            Doe

搜索

john peter 返回 id 1
john 返回 id 1,2
doe 返回 id 1,3
john doe 返回 id 1
peter john 返回 id 1
peter doe 返回 id 1
doe john 返回 id 1

我之前尝试过以下方法。搜索John Doe

SELECT * FROM names WHERE (
  `first` LIKE '%john%' OR
  `first` LIKE '%doe%' OR
  `last` LIKE '%john%' OR
  `last` LIKE '%doe%'

)

同时返回 1 和 3

【问题讨论】:

    标签: php sql mysql search select


    【解决方案1】:

    名字和姓氏之间的关联是必需的。

    对于两个单词(w1,w2),条件

    ( first LIKE "%w1%" AND last LIKE "%w2%" ) OR ( first LIKE "%w2%" AND last LIKE "%w1%" )
    

    意思是,w1 必须在名字中,w2 在姓氏中,
    w2 必须在名字中并且 w1 在姓氏中。

    这样,John Doe 将选择 ID 1。

    【讨论】:

      【解决方案2】:

      您可以用空格分割用户名“单词”并获取数组的最后一项,该项目应该是他的姓氏。然后你应该像“Nanne”所说的那样查询SQL,或者你可以使用标签搜索。

      祝你好运。

      【讨论】:

        【解决方案3】:

        我不知道你到底在问什么,但你不是说这个吗?

        WHERE (`first name` LIKE '%searchString%' OR `last name` LIKE '%searchString%')
        

        正如您评论所说,如果任何单词可以在任何列中(并且它们应该至少出现一次?还是应该最合适?不同的顺序是否意味着什么)那么您将不得不做一些事情更多,但你真的需要先考虑一些规范:)

        【讨论】:

        • 不,如果我有 John Peter Doe,名字为 John Peter,姓氏为 Doe,搜索“John Doe”将不会返回任何内容。
        • 是的,确实,如果您希望 that 能够,您应该稍微澄清一下您的问题,您不觉得吗?可以搜索的内容,列中的内容等。
        • 我更新了帖子以包含一些示例。希望对您有所帮助。
        【解决方案4】:

        一个简短的解决方案是通过 preg_match 或类似的东西找到输入的最后一个空格(现在真的不记得正确的函数),然后将其用作标记。将标记之后的所有内容存储在姓氏“searchstring”中,并将其之前的所有内容存储在名字“searchstring”中。

        这个解决方案的一个明显缺陷是,如果这个人的姓氏有 2 个单词。但是,我不确定您是否 /do/ 接受 2 个字的姓氏。所以,让我在这里引用 Nanne:

        你应该澄清你的问题 一点,你不觉得吗?可以是什么 搜索,列中的内容等 等等

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-08-24
          • 2019-08-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多