我正在使用LIKE "Asia/Tokyo"
查询为我的项目创建搜索功能。
在我尝试将功能设置为“用户友好”时,我发现自己包含了大量的CONCAT请求。
即
mysqli
这里的想法是允许用户以任何顺序输入他们的搜索,以找到他们正在寻找的确切内容。
例如,用户“A”可能不记得街道的名称,因此他们搜索街道号码和郊区。或者他们可能会记住联系人的名字和郊区,但不记得姓氏。
所以我的问题是,是否有一个简单的条目可以涵盖单个WHERE选择的所有可能的连接组合?
实施例
$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");
答案 0 :(得分:0)
使用Concat_ws
: -
WHERE concat_ws(' ',k_name,f_name,l_name,phone...) LIKE '%$searching%'
答案 1 :(得分:0)
为了达到我追逐的结果,我遵循了@RavinderReddy的建议。
我开始爆炸字符串
$search_text = $_GET['userInput'];
$searching = strtolower($search_text);
$explode = explode(" ", $searching);
然后我检查了内容的各个爆炸并输出结果
if($explode[0] != ''){
$firstterm = $explode[0];
}else{
$firstterm = '@@@';
}
if($explode[1] != ''){
$secondterm = $explode[1];
}else{
$secondterm = '@@@';
}
if($explode[2] != ''){
$thirdterm = $explode[2];
}else{
$thirdterm = '@@@';
}
}
我使用'@@@',因为它永远不会匹配我的任何数据。
最后,我修改了我的mysqli查询以反映并包含新的OR LIKE搜索词。
$contact = $mysqli->query("
SELECT * FROM contact WHERE
f_name LIKE '%$firstterm%'
OR l_name LIKE '%$firstterm%'
OR concat( f_name,l_name ) LIKE '%$firstterm%'
OR f_name LIKE '%$secondterm%'
OR l_name LIKE '%$secondterm%'
OR concat( f_name,l_name ) LIKE '%$secondterm%'
order by id LIMIT 5");
要考虑的是我已经设置了我的数据库,以便所有条目都不包含任何空格。在显示我的数据时,为了保持一致,我已经这样做了,并且让用户能够以他们想要的方式“格式化”他们的搜索,并且仍然可以找到他们想要的结果。
我要采取的下一步是尝试找到一种方法,通过与“id”匹配的大量匹配字符来“订购”。原因是,如果我输入'C Blogs'寻找'Craig Blogs'''C'会因为电子邮件地址'。''而对我的所有联系人产生影响。
因此,如果我能通过大多数匹配字符将其输入ORDER,那么理论上最重要的结果应该是“Craig Blogs”。
注意:我是这个网站的新手,也是我回答问题的新手。如果格式不佳或我过度解释,我很抱歉。