【发布时间】:2018-07-16 09:24:14
【问题描述】:
我有一个用户表:
user_id | firstname | last name | picUrl ...
1 bob smith null
2 bobby smith null
3 rob smithies null
我还有一个朋友表:
friend1_id | friend2_id | status | date_established
1 2 accepted 2018-02-06 10:23:01
2 1 accepted 2018-02-06 10:23:01
我有一个简单的查询来根据条件 ($searchString) 搜索用户并根据“最佳”匹配对他们进行排序:
$query = "SELECT user_id, firstname, lastname, picUrl, LOWER(CONCAT(firstname, ' ', lastname)) as fullname
FROM user
WHERE LOWER(CONCAT(firstname, ' ', lastname)) LIKE LOWER('%" . $searchString . "%') AND user_id != '{$userId}'
ORDER BY
CASE WHEN fullname = LOWER('" . $searchString . "') THEN 0
WHEN fullname = LOWER('" . $searchString . "%') THEN 1
WHEN fullname = LOWER('%" . $searchString . "%') THEN 2
WHEN fullname = LOWER('%" . $searchString . "') THEN 3
ELSE 4
END, fullname DESC
LIMIT 5";
查询将忽略当前用户:
user_id != '{$userId}'
因为您无法将自己添加为好友。
如何忽略/不显示已经是朋友的用户?
示例
我是用户 1。
我搜索“Smith”。
=> 我是用户 1,所以我不是 显示出来。
=> 用户 2 已经是我的朋友,因此不会显示。
=> 仅显示 Rob Smithies。
【问题讨论】:
-
你在这里要求什么?您想要一些用户尚未成为朋友的用户列表吗?
-
我想要一个符合搜索条件但还不是朋友的用户列表。
-
您的好友表有些不清楚。例如,好友请求是由“friend1”还是“friend2”发送的,谁接受了?我不会称这些为“friend1”和“friend2”,而是“sender_id”和“receiver_id”,或者类似的东西。
标签: php mysql join search mysqli