如何使用MySQL查询从DB中的所有行中查找类似的结果

时间:2013-11-25 06:43:07

标签: php mysql

我想在facebook中制作“Search your LOGIN”:

EG。搜索“Stock Overflow”将返回

Stack Overflow
SharePoint Overflow
Math Overflow
Politic Overflow
VFX Overflow

EG。搜索“LO”将返回:

pabLO picasso
michelangeLO
jackson polLOck

EG。搜索用户名“user123”将返回:

 user123
 user1234
 and etc ...

我的数据库行:

userid  |   username  |  useremail   |  user_fname   |  user_lname  

我想创建一个搜索输入,搜索上述任何一行中的单词,如上面的例子

这里我的PHP到现在为止:

$string = $purifier->purify(@$_POST['string']); 

          $query = "SELECT * FROM users WHERE user_fname = '".$string."' OR user_lname = '".$string."' OR username = '".$string."' OR useremail= '".$string."'";
          mysql_query("SET NAMES 'utf8'");
          $result2 = mysql_query($query);
          $num = mysql_num_rows($result2);

          if($num == 1)
          {
              //true
          }else{

              //not found nothing
          }

这种方式效果不好,并没有返回我在搜索输入中输入的所有类似的重复。 加上如果有超过1个类似的结果我如何用foreach返回它?

感谢分配。

更新:

感谢所有人,我更新了代码来修复它:

 $query = "SELECT * FROM users WHERE user_fname like '%".$string."%' OR user_lname like '%".$string."%' OR username like  '%".$string."%' OR useremail like '%".$string."%'";

并且我没有使用mysql,只是为了我更容易做的例子..

5 个答案:

答案 0 :(得分:2)

试试这个

$string = $purifier->purify(@$_POST['string']); 

      $query = "SELECT * FROM users WHERE user_fname like '%".$string."%' OR user_lname like '%".$string."%' OR username like  '%".$string."%' OR useremail like '%".$string."%'";
      mysql_query("SET NAMES 'utf8'");
      $result2 = mysql_query($query);
      $num = mysql_num_rows($result2);

      if($num == 1)
      {
                //true
              }else{

                 //not found nothing
              }

答案 1 :(得分:0)

使用此

更改您的查询
$query = "SELECT * FROM users WHERE user_fname LIKE '".$string."%' OR user_lname LIKE '".$string."%' OR username LIKE '".$string."%' OR useremail LIKE '".$string."%'";

注意:

如果您有user123个关键字,并且想要搜索包含数据user123*的所有行,则可以应用通配符$string%

如果是*user123*,您可以使用%$string%

如果是*user123,您可以使用%$string

答案 2 :(得分:0)

试试这个

$query = "SELECT * FROM users WHERE user_fname like '%".$string."%' OR user_lname like '%".$string."%' OR username like '%".$string."%' OR useremail like '%".$string."'%";

答案 3 :(得分:0)

试试这种方式

$query = "SELECT * FROM users WHERE user_fname LIKE '%".$string."%' OR user_lname = '%".$string."%' OR username = '%".$string."%' OR useremail= '%".$string."%'";

获取Like keyword

的信息

注意

  • 请避免使用mysql_ ...使用mysqli _ 或PDO

答案 4 :(得分:0)

试试这个:

$query = "SELECT * FROM users 
WHERE user_fname LIKE '%$string%' 
OR user_lname LIKE '%$string%' 
OR username LIKE '%$string%' 
OR useremail LIKE '%$string%'";