2013-04-01 52 views
0

我有,只是不提供结果的查询:PHP/MySQL的搜索结果使用在字符串变量

数据库
$name = "John Smith"; 

$query = "SELECT * FROM my_table WHERE lname LIKE '%$name%' AND fname LIKE '%$name%'"; 

LNAME将被列为史密斯在数据库 FNAME将可能上市作为约翰S.

一些条目有一个中间名称初始,有些不。

另外,在查询此信息的页面上,名称被拉入为一个字符串,而不是名字和姓氏字符串。现有代码的限制。

所以我想搜索字符串$ name以及名字中的姓氏。我认为我做错了。这可能吗?还是有另一种方法来做到这一点?

+0

'回声$查询;'和MySQL中直接运行它。 –

+2

您在'lname'和'fname'字段中搜索字符串'John Smith' - 这是无法找到任何内容的,因为内容在两个字段之间被分割。 – andrewsi

+0

$ query =“SELECT * FROM my_table WHERE lname LIKE'%$ name%'或fname LIKE'%$ name%'”; – dikirill

回答

1

这个怎么样(如果我正确认识你):

SELECT * 
FROM my_table 
WHERE '$name' like concat(fname,' %') 
    AND '$name' like concat('% ',lname) 

SQL Fiddle Demo

要搜索FNAME领域,它正在搜索的全名后concats一个 '%'。要搜索lname字段,它会在完整名称前连接一个'%'。

编辑:马里奥的好评论的细微变化,使用REGEXP

SELECT *, CONCAT_WS(' ', fname, lname) 
FROM my_table 
WHERE CONCAT_WS(' ', fname, lname) REGEXP REPLACE('$name',' ', '.*') 

More Fiddle

既然你提到你不能分手(为什么?),这款采用替换替换参数相应的空间。

+0

我会修改这一点:select * from foo2其中“john smith”in(fname,lname)或CONCAT_WS(“”,fname,lname)REGEXP“john。* smith” ; –

+0

@MarioMueller - 我喜欢REGEXP选项 - 我将编辑要显示的帖子。谢谢! – sgeddes

+0

@MarioMueller - 实际上,这需要改变$ name的输入,我不认为OP可以这样做。如果OP可以改变输入,那么我也喜欢这个选项。 – sgeddes

0

我不明白,究竟是什么问题,但接下来的查询可以帮助你:

SELECT * FROM my_table WHERE '$name' LIKE CONCAT('%', lname ,'%') and '$name' LIKE   CONCAT('%',fname ,'%') 

如果需要检查,如果L-NAME包含在$名称显示您的查询是不正确的,你是检查相反。

0

我有这方面的解决方案..你可以尝试这样的

$name = "John Smith"; 

$query = "SELECT * FROM my_table WHERE fname LIKE substring_index(".$name.",' ',1) AND fname LIKE substring_index(".$name.",' ',-1)"; 
相关问题