我有一个名为users的表 这个表看起来像什么
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`)
)
最后我有一张叫朋友的桌子, 这个表看起来像什么
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,那么一行将被添加到friends表中,属性user_id1是userA而user_id2是userB。
我试图为搜索框编写一个mysql查询。用户将输入一个字符串,查询将抓取包含该字符串的用户列表,但需要首先显示该用户所关注的人员。所以,如果我们有3个用户
如果用户Chris(谁跟随jason)在搜索框中输入字符串'ja',则查询将使用以下顺序抓取用户列表jason,jack。因为杰森之后是克里斯。
从我的理解,我认为它可能是一组问题,我尝试了不同的查询,但我无法得到所需的结果
你们有什么想法吗?非常感谢
答案 0 :(得分:2)
你必须做一个排序技巧,所以友谊得到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
@thanks to scwagner指责我扩展JOIN-clause