遵循mySQL表搜索结果

时间:2014-04-29 22:57:39

标签: php mysql

我有一个以下系统,用户可以互相关注并搜索要关注的用户。以下是用户以下表的示例:

Users Table:
+-------+-----------+
| id    | userName  |
+-------+-----------+
| 1     | John      |
| 2     | Harriet   |
| 3     | Chris     | 
| 4     | Lisa      | 
| 5     | Joe       | 
+-------+-----------+

Following Table:
+-------+-------+-------+
| id    | id_1  | id_2  |
+-------+-------+-------+
| 1     | 5     | 3     |
| 2     | 1     | 2     |
| 3     | 1     | 5     |
| 4     | 5     | 4     |
+-------+-------+-------+

我想知道如何构建mySQL语句以将以下表加入用户表,其中用户名就像'%$ search%& #39;返回此事件的所有结果(即搜索' jo' 返回John和Joe)并且当每个人有多个结果时(即Joe将在中出现两次)仅返回id_1是当前登录用户ID的结果,以显示已登录用户已关注此人。

$search = $_POST['search'];
$userid = $_POST['userid'];

$qry = "
SELECT u.id
     , u.userName
     , f.id_1
     , f.id_2 
  FROM users u
  LEFT 
  JOIN following f
    ON IF('$userid' = f.id_1, u.id = f.id_2, u.id = f.id_1)
 WHERE u.userName LIKE '%$search%';
 ";

此查询会返回以下表中每次出现的用户名,但只返回一次。

任何帮助都会很棒。 感谢。

1 个答案:

答案 0 :(得分:1)

不是绝对确定但是试一试

SELECT u.id
     , u.userName
     , f.id_1
     , f.id_2 
  FROM users u
  LEFT JOIN following f
  ON u.id in (f.id_1,f.id_2)
  AND f.id_1 = '$userid'
 WHERE u.userName LIKE '%$search%'
 ORDER BY u.id
 LIMIT 1;