0

我有一个不提供结果的查询:

$name = "John Smith";

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

数据库中的 lname 将被列为 Smith 数据库中的 fname 可能会被列为 John S.

有些条目的名字后面有一个中间的首字母,有些则没有。

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

所以我试图在字符串 $name 中搜索姓氏以及名字。我假设我做错了。这可能吗?还是有其他方法可以做到这一点?

4

3 回答 3

1

这个怎么样(如果我理解正确的话):

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

SQL 小提琴演示

要搜索 fname 字段,它会在要搜索的全名之后连接一个“%”。并且要搜索 lname 字段,它会在全名之前连接一个 '% '。

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

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

更多小提琴

既然你提到你不能分解参数(为什么?),这使用 replace 相应地替换空间。

于 2013-04-01T19:22:05.113 回答
0

我不明白到底是什么问题,但下一个查询可以帮助你:

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

如果您需要检查 lname 是否包含在 $name 中,则您显示的查询不正确,而您正在检查相反的情况。

于 2013-04-01T19:21:21.397 回答
0

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

$name = "John Smith";

$query = "SELECT * FROM my_table WHERE fname LIKE substring_index(".$name.",' ',1) AND fname LIKE substring_index(".$name.",' ',-1)";
于 2013-04-01T19:25:56.647 回答