我有一个包含两列的数据库:名字和姓氏。名字可以有多个单词。姓氏可以包含带连字符的单词。
有没有办法只用一个输入框搜索两列?
数据库
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
答案 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 有点,你不觉得吗?什么可以 搜索,列中的内容等 等