我有一个名为 users 的表 这是 table 的样子
CREATE TABLE `users` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`username` varchar(32) NOT NULL,
`password` varchar(60) NOT NULL,
`email` varchar(60) NOT NULL,
PRIMARY KEY (`id`)
)
最后我有一张名为 friend 的 table , 这是 table 的样子
CREATE TABLE `friends` (
`friendship_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`user_id1` bigint(20) unsigned NOT NULL,
`user_id2` bigint(20) unsigned NOT NULL,
`time_created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`friendship_id`),
KEY `user_id1` (`user_id1`),
KEY `user_id2` (`user_id2`),
CONSTRAINT `friends_ibfk_1` FOREIGN KEY (`user_id1`) REFERENCES `users` (`id`),
CONSTRAINT `friends_ibfk_2` FOREIGN KEY (`user_id2`) REFERENCES `users` (`id`)
)
所以基本上,如果 userA 关注 userB,那么将向 friend 表添加一行,属性 user_id1 是 userA,user_id2 是 userB。
我正在尝试为搜索框编写 mysql 查询。用户将输入一个字符串,查询将抓取包含该字符串的用户列表,但需要首先显示用户关注的人。
所以如果我们有 3 个用户
- jack
- 贾森
- 约翰
如果用户 Chris(关注 jason)在搜索框中输入字符串“ja”,查询将按照 jason,jack 的以下顺序抓取用户列表。因为杰森后面跟着克里斯。
根据我的理解,我认为这可能是一组问题,我尝试了不同的查询但无法获得所需的结果
你们有什么想法吗?
非常感谢
最佳答案
你必须做一个排序技巧,所以在临时字段中,友谊得到 0,非友谊得到 1,然后我们对该字段进行升序排序,然后我们按用户名排序
SELECT x.username
FROM users x LEFT JOIN friends y ON x.id=y.user_id2 AND y.user_id1=$LOGGED_IN_USER
WHERE LOWER(x.username) LIKE 'ja%'
ORDER BY CASE WHEN y.user_id2 IS NULL THEN 1 ELSE 0 END,x.username
@感谢 scwagner 指点我扩展 JOIN 子句
关于php - mysql查询的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6811725/