查询指示意外事件

时间:2018-08-26 14:07:16

标签: php mysql sql database

我想用Facebook风格做一个朋友搜索部分。但是我只想将我的朋友放在一个朋友表中。我的表格在此 DEMO 中。

    $result = mysqli_query($this->db,"        
SELECT U.username
     , U.userid
     , U.userfullname
     , UT.username
     , UT.userid
     , UT.userfullname
     , F.role 
  FROM friends F 
  JOIN users U 
    ON F.userone = U.userid
  JOIN users UT 
    ON F.usertwo = UT.userid
 WHERE U.username Like '%$key' 
    OR UT.userfullname Like '$key%' 
    OR UT.username Like '$key%' 
    OR UT.userfullname Like '%$key' 
    OR UT.username Like '$key' 
    OR UT.userfullname Like '$key'  
   AND F.userone = '$uid' 
   AND (F.role='fri' OR F.role = 'flwr')
 ORDER 
    BY F.userone 
 LIMIT 10
") or die(mysqli_error($this->db));
    while($row=mysqli_fetch_array($result,MYSQLI_ASSOC)) {
         $data[]=$row;
    }
    if(!empty($data)) { 
     return $data;
    } 

正在搜索的人的用户ID($uid)是1,关键字是例如aziz,因为方位角的userid2,并且如果您检查了朋友,表userone1)和usertwo2)是那里的朋友。我们怎么知道他们是朋友,因为rolefri。您也可以在 DEMO 页中看到它。

现在,这是什么问题!问题是,当$ uid(1)搜索他/她的朋友时,查询还显示了角色='me',但我只想显示F.role='fri' OR F.role = 'flwr'。我的查询有什么问题。

1 个答案:

答案 0 :(得分:1)

怎么样...

SELECT U.username
     , U.userid
     , U.userfullname
     , UT.username
     , UT.userid
     , UT.userfullname
     , F.role 
  FROM friends F 
  JOIN users U 
    ON F.userone = U.userid
  JOIN users UT 
    ON F.usertwo = UT.userid
 WHERE (
       U.username Like '%$key' 
    OR UT.userfullname Like '$key%' 
    OR UT.username Like '$key%' 
    OR UT.userfullname Like '%$key' 
    OR UT.username Like '$key' 
    OR UT.userfullname Like '$key' 
     ) 
   AND F.userone = '$uid' 
   AND F.role IN('fri','flwr')
 ORDER 
    BY F.userone 
 LIMIT 10

请注意,您仍然可以使用这种方法进行注射。