使用1个输入字段搜索2列

时间:2011-01-15 14:30:23

标签: php sql mysql search select

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

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

数据库

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

4 个答案:

答案 0 :(得分:1)

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

祝你好运。

答案 1 :(得分:1)

需要名字和姓氏之间的相关性。

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

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

含义, w1 必须以姓氏名称AND w2 姓氏,
w2 必须使用姓氏AND w1 名字。

这样John Doe就会选择ID 1。

答案 2 :(得分:0)

我不知道你究竟在问什么,但你不是指这个吗?

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

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

答案 3 :(得分:0)

一个简短的解决方案是通过preg_match找到输入的最后一个空格或者那个效果(实际上现在还记不起正确的函数),然后将其用作标记。将标记后面的所有内容存储在姓氏“searchstring”中,并将其中的所有内容存储在名称“searchstring”中。

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

  

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