- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个非常简单的表 - follow
- 我在其中存储关注者。
user | following
-----------------
1 | 2
以上表示用户1
正在关注用户2
。
我想在主页上显示所有用户,并命令他们购买拥有最多关注者的用户,然后返回其余没有关注者的用户。下面的查询可以显示用户,但我不知道如何检索没有任何关注者的用户。我尝试过 RIGHT JOIN users u ON f.following=u.id
但这给了我奇怪的结果。
此查询返回有关注者的用户 2
,但不会返回没有关注者的用户 1
和 3
。
编辑:此查询还会检查用户是否回访,这就是我使用 ID 1 加入作为测试的原因。
SELECT
u.id
,u.username
,u.avatar
,COUNT(1) AS followers
,ul.*
,fo.*
FROM follow f
LEFT JOIN users u ON f.following=u.id
LEFT JOIN follow fo ON fo.following=u.id AND fo.user=1
LEFT JOIN users_likes ul ON ul.likes=u.id AND ul.user=1
GROUP BY f.following
ORDER BY COUNT(1) DESC
SQL fiddle :http://sqlfiddle.com/#!2/98f65/1
最佳答案
问题中查询的问题是您左连接下表。这意味着将包含下表中的所有行,无论它们与另一个表的连接如何。您想要的是显示所有用户,因此该表应该位于联接的外端。
我还认为您试图在这里同时做太多事情,这就是您难以弄清楚的原因。您想知道谁有关注者,谁没有,谁在关注,对他们进行排序,考虑用户的喜好等等。我建议退后一步,将它们分解为单独的查询,然后根据需要将它们构建到一个结果集中。
要获取用户和关注者数量,您可以将用户表与以下表进行外部联接,如下所示:
SELECT u.id, u.username, u.avatar, (IFNULL(COUNT(f.following), 0)) AS numFollowers
FROM users u
LEFT JOIN follow f ON f.following = u.id
GROUP BY u.id
ORDER BY numfollowers DESC;
IFNULL 用于检查没有关注者的情况,并且外连接中没有进行链接,因此出现空值。
如果您想在 users_likes 表中工作,您应该将其添加为另一个左联接。这导致的问题是,如果没有喜欢,它将为所有列返回空值。 (例如,如果我在此处保留加入 users_likes 表,我将看到用户 1 和 3 为 null,因为没有人“喜欢”他们。)为了使结果集更容易理解,我建议您不要收集用户 1 和 3 的所有行。 users_likes 表。也许这个查询更有意义:
SELECT u.id, u.username, u.avatar, (IFNULL(COUNT(f.following), 0)) AS numFollowers, ul.user AS likedByUser, ul.created_at
FROM users u
LEFT JOIN follow f ON f.following = u.id
LEFT JOIN users_likes ul ON ul.likes = u.id
GROUP BY u.id
ORDER BY numfollowers DESC;
至于用户是否回关注,我认为这会有所改变,因为上面仅显示关注者的数量,并且不会为每个关注者生成一行。
如果您还有任何疑问,请告诉我,这是 SQL Fiddle对于上述情况。我将让您自行处理现在出现的空值。
关于mysql - 获取有关注者和无关注者的用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26692746/
我希望手机上的网页背景在菜单栏出现和消失时不会发生变化。我已将背景设置为位置:固定;底部:0。这使其在 Chrome 浏览器中保持固定,因为底部没有工具栏或其他菜单,并且减少了 iOS 和 Andro
我正在尝试显示数组中的动漫列表。我已经使用“oredrby”过滤器对列表进行了排序。每次添加新行时,我都想自动滚动到列表中最后插入的行。请注意,我不想自动滚动到列表底部。这是 DEMO 演示我的问题。
完全放弃对技术团队的管理,孤身一人闯市场,确实需要一定的勇气。但是光有勇气就像无头的苍蝇,还得有技术、产品、方案和市场生态,当然最终也有运气的成分。技术、产
我需要一种动态的方式来添加备注 在我的 中的哪个单元格中ID 列 A .但是,注释需要使用 B 列和 C 列中的信息。例如: 2020 年 1 月 13 日,安妮 . 我不确定如何检查 中每个值的次数
我正在复制 Question 之前提出的相同问题.我已经尝试了给出的解决方案,但由于 sizetofit 在我使用 Autolayout 时无效,因此无法解决。 预期的显示如下。 最佳答案 编辑 在我
这个问题已经有答案了: What causes javac to issue the "uses unchecked or unsafe operations" warning (12 个回答) 已关
另外:我通过在 VS2013 的属性页中编辑命令参数来重定向标准输入。我正在做一个小项目,它要求我在不使用 ifstream 的情况下读取文件,因为它说:您可以用于此分配的唯一库是 iostream、
我对 IIS 完全陌生。 我对如何配置 IIS 有非常基本的了解。 今天有个需求访问网站全局 通过 WAN(通过世界各地任何 PC 的互联网)我已经部署在我的本地 IIS 中。 网站=> Silver
这个问题已经有答案了: What causes javac to issue the "uses unchecked or unsafe operations" warning (12 个回答) 已关
我正在尝试获取元素相对于浏览器窗口的 X 和 Y 坐标。 我正在开发的系统是由各种框架组成的。我通常会远离框架,但我目前正在开发一款经常使用框架的软件。 我正在构建一个弹出引擎,需要将弹出窗口恰好放置
我在使用 Firebase 分析 (6.3.0) 时收到以下错误: Note: C:\src\flutter\flutter\.pub-cache\hosted\pub.dartlang.org\fi
我是 JAVA 领域的新手,我为我的作业编写了一段代码,当我使用 Netbeans 编译它时,它工作得很好。当我通过 cmd 编译 .java 文件时,出现上述错误。如果它能够识别哪一行产生了不安全的
**注意 - 这与此处发现的与 mysql root 密码重置和连接问题相关的其他问题不同 - 我有我的 root 密码。有东西定期 ping mySQL 并试图使用“root”,这对我来说很奇怪。
我试过使用日志,但它比迭代版本要花费更多的时间来寻找答案。数字是整数。 Using log:- int ans = (log(x)/log(2)); Iterative version:- int t
我是一名优秀的程序员,十分优秀!