我有一个以下系统,用户可以互相关注并搜索要关注的用户。以下是用户和以下表的示例:
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%';
";
此查询会返回以下表中每次出现的用户名,但只返回一次。
任何帮助都会很棒。 感谢。
答案 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;