php - mysql查询的问题

标签 php mysql group-by

我有一个名为 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/

相关文章:

mysql - SQL - CONCAT 与 IF 语句返回 1583 错误

c# - LINQ - 加入 3 个表与分组和求和

php - MySQL 将不同值的计数选择到单独的列中

php - 无法完成TeSTLink安装

php - 为什么我的 MySQL Group By Hours vs Half Hours 文件不显示相同的数据?

javascript - 来自 $.post jquery 方法的图像不显示返回的图片,知道吗?

mysql - 列计数与第 1 行的值计数不匹配

r - 如何在R中的组内排名?

php - Strtolower 用户名然后将其存储在数据库中是个好主意吗?

php - 词栅栏 |微软Azure