php - 一种覆盖所有串联组合的简单方法

标签 php mysql mysqli

我正在使用 LIKE mysqli 查询为我的项目创建一个搜索功能。

在我尝试使功能尽可能“用户友好”的过程中,我发现自己包含了很多 CONCAT 请求。

$contact = $mysqli->query("SELECT * FROM contact WHERE k_name LIKE '%$searching%' OR f_name LIKE '%$searching%' OR l_name LIKE '%$searching%' OR concat( f_name,l_name ) LIKE '%$searching%' OR concat( k_name, l_name ) LIKE '%$searching%' OR mobile LIKE '%$searching%' OR phone LIKE '%$searching%' OR w_phone LIKE '%$searching%' OR w_fax LIKE '%$searching%' OR k_email LIKE '%$searching%' OR email LIKE '%$searching%' OR w_email LIKE '%$searching%' order by id LIMIT 5");

这里的想法是允许用户以任何顺序输入他们的搜索以准确找到他们正在寻找的东西。

例如,用户“A”可能不记得街道名称,因此他们搜索街道号码和郊区。或者,他们可能记得联系人的名字和郊区,但不记得姓氏。

所以我的问题是,是否有一个简单的条目可以涵盖单个 WHERE 选择的所有可能的串联组合?

例子

$contact = $mysqli->query("SELECT * FROM contact WHERE concat(all) LIKE '%$searching%' OR f_name LIKE '%$searching%' OR l_name LIKE '%$searching%'OR mobile LIKE '%$searching%' OR phone LIKE '%$searching%' OR w_phone LIKE '%$searching%' OR w_fax LIKE '%$searching%' OR k_email LIKE '%$searching%' OR email LIKE '%$searching%' OR w_email LIKE '%$searching%'

最佳答案

使用 Concat_ws :-

WHERE concat_ws(' ',k_name,f_name,l_name,phone...) LIKE '%$searching%'

关于php - 一种覆盖所有串联组合的简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33800868/

相关文章:

php - 如何在php中显示查询错误

php - 如何使用循环绑定(bind) mysqli 参数并将结果存储在数组中?

php - 将来自其他表的 select id 与 insert on single 命令结合起来

php - 选择 count() 等于特定值的所有用户

mysql - MySQL 中的 block 式和行式混洗

mysql - 在 SQL 中查询任意 x 处的 y 值的 XY 数组对

MYSQL where on sum(table1.column_name) < table2.other 列

php - 对于大数据集,哪个更快? mysql、mysqli 还是 PDO?

php - array_search bool 返回值

PHP 字符串转十六进制