简体   繁体   English

PHP / AJAX案例不敏感的搜索

[英]PHP/AJAX Case Insensitive search

I am trying to do create a case-insensitive search on multiple DB columns in a single search input. 我试图在单个搜索输入中的多个数据库列上创建不区分大小写的搜索。

Currently I have the search working for multiple columns using a single search string. 目前,我使用单个搜索字符串搜索多个列。 The issue is that it does not work case-insensitive. 问题是它不会对大小写不敏感。

As an example...if I search a project's status: "paid" it will not find the associated project because the status name in the DB is set to "Paid". 作为示例...如果我搜索项目的状态:“付费”,它将找不到关联的项目,因为数据库中的状态名称设置为“付费”。

I am trying to make it so a user can search by "paid" or "Paid" returning the same results. 我试图让它成为用户可以通过“付费”或“付费”搜索返回相同的结果。

Here is my code: 这是我的代码:

    if (isset($_GET['keyword'])) {
    $_SESSION['quickSearch']=$_GET['keyword'];
    $keyword = trim($_GET['keyword']);

    $srWords  = explode(' ', $keyword);
    $srString = array();
    foreach ($srWords as $srWord) {
        if (!empty($srWord))
            $srString[] = '[NM] like \'%' . $db->sql_escape($srWord) . '%\'';
    }
    $srStringHving = implode(' AND ', $srString);
    $srString      = implode(' OR ', $srString);

    $query = "SELECT clients.clientName,
       projects.Client_ID,
       projects.projectNumber,
       projects.projectName,
       projects.projectManager,
       projects.expectedDate,
       projects.address,
       projects.CreationDate,
       projects.custom1,
       projects.custom2,
       projects.custom3,
       projects.custom4,
       projects.custom5,
       projects.custom6,
       projects.custom7,
       projects.custom8,
       projects.custom9,
       projects.Status_ID,
       statuses.status, concat(clients.clientName,' ',
       projects.Client_ID,' ',
       projects.projectNumber,' ',
       projects.projectName,' ',
       projects.projectManager,' ',
       projects.expectedDate,' ',
       projects.address,' ',
       projects.CreationDate,' ',
       projects.custom1,' ',
       projects.custom2,' ', 
       projects.custom3,' ',
       projects.custom4,' ', 
       projects.custom5,' ',
       projects.custom6,' ',
       projects.custom7,' ', 
       projects.custom8,' ',
       projects.custom9,' ',
       projects.Status_ID,' ',
       statuses.status) as srterm
FROM projects
JOIN clients ON projects.Client_ID = clients.Client_ID
JOIN statuses ON  projects.Status_ID = statuses.Status_ID
WHERE " . str_ireplace('[NM]', 'clientName', $srString) . "
  OR " . str_ireplace('[NM]', 'projectNumber', $srString) . "
  OR " . str_ireplace('[NM]', 'projectName', $srString) . "
  OR " . str_ireplace('[NM]', 'address', $srString) . "
  OR " . str_ireplace('[NM]', 'area', $srString) . "
  OR " . str_ireplace('[NM]', 'status', $srString) . "
  OR " . str_ireplace('[NM]', 'custom1', $srString) . "
  OR " . str_ireplace('[NM]', 'custom2', $srString) . "
  OR " . str_ireplace('[NM]', 'custom3', $srString) . "
  OR " . str_ireplace('[NM]', 'custom4', $srString) . "
  OR " . str_ireplace('[NM]', 'custom5', $srString) . "
  OR " . str_ireplace('[NM]', 'custom6', $srString) . "
  OR " . str_ireplace('[NM]', 'custom7', $srString) . "
  OR " . str_ireplace('[NM]', 'custom8', $srString) . "
  OR " . str_ireplace('[NM]', 'custom9', $srString) . "  HAVING " . str_ireplace('[NM]', 'srterm', $srStringHving) ."
ORDER BY projects.project_ID DESC
LIMIT 0 , 200";  

$result = mysqli_query($dbc, $query);

thanks, ahead of time for any help! 谢谢,提前帮忙!

Look into the LOWER() method provided by MySQL. 查看MySQL提供的LOWER()方法。 You can emulate a case insensitive search by transforming the string to lower case. 您可以通过将字符串转换为小写来模拟不区分大小写的搜索。

SELECT * FROM my_table WHERE LOWER(my_field) = 'my value';

From this answer : 这个答案

You can lowercase the value and the passed parameter : 您可以小写值和传递的参数:

SELECT * FROM `table` WHERE LOWER(`Value`) = LOWER("DickSavagewood")

Another (better) way would be to use the COLLATE operator as said in the documentation 另一种(更好的)方法是使用文档中所述的COLLATE运算符

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM