代码之家  ›  专栏  ›  技术社区  ›  Guilhermy

如何使用like和多个无序值进行SQL查询

  •  3
  • Guilhermy  · 技术社区  · 8 年前

    我在社区里寻找答案,但找不到任何具体的答案。我有一个页面,在这里我可以搜索以前在我的MySQL数据库中注册的用户的名称。我目前正在使用以下语句:

    菲律宾: $value = str_replace(' ', '%', $search);

    SQL: "select * from user where name like '%".$value."%' order by name asc;"

    这个 $搜索 变量来自同一页上的搜索表单。(上面的代码允许我使用多个值进行查询)。例如,考虑一个名为 路易斯·亨里克·达席尔瓦 ,如果我搜索 路易斯 ,请 路易斯·恩里克 ,甚至 路易斯·席尔瓦 ,此代码有效 完美 ,列出该用户。

    但我的问题是:如果我不按顺序搜索名字,比如 席尔瓦·亨里克 ,或 席尔瓦·路易斯 ,将不列出用户。如何以简单的方式启用此反向搜索?

    请注意,使用此代码我可以搜索单独的值,因此我需要使用无序的值进行查询!

    3 回复  |  直到 8 年前
        1
  •  0
  •   Sinto    8 年前
    $search = 'Jobs Steve';
    $search = mysql_real_escape_string($search);
    $where_condition = '';
    $search_arr = explode(' ', $search);
    foreach($search_arr as $key => $name) {
        if ($where_condition != '') $where_condition .= ' AND ';
      $where_condition .= " name LIKE '%$name%' ";
    }
    
    $sql = "SELECT * FROM user WHERE $where_condition ORDER BY name ASC;";
    

    $sql SELECT * FROM user WHERE name LIKE '%Jobs%' AND name LIKE '%Steve%' ORDER BY name ASC;

        2
  •  3
  •   Gerard H. Pille    8 年前

    $value = str_replace(" ", "%' and name like '%", $search);
    

    $value = preg_replace('/\s+/', "%' and name like '%", $search);
    
        3
  •  0
  •   Jordan Soltman    8 年前

    http://php.net/manual/en/mysqli.quickstart.prepared-statements.php

    WHERE name LIKE '%Luiz%' AND name LIKE '%Henrique%'

    AND LIKE