mysql查询的问题

时间:2011-07-25 04:13:41

标签: php mysql group-by

我有一个名为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。因为杰森之后是克里斯。

从我的理解,我认为它可能是一组问题,我尝试了不同的查询,但我无法得到所需的结果

你们有什么想法吗?

非常感谢

1 个答案:

答案 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