mysql - 如何获取所有推荐次数超过 100 的用户?
问题描述
我有一个具有推荐系统的服务。服务的数据库中有一个表users
,其中包含id
和referrers
列。列referrer 包含一串以. 分隔的referrer id ,
。这是该表中的示例数据:
+------+---------------+
| id | referrers |
+------+---------------+
| 1 | 1 |
| 7 | 1 |
| 8 | 1 |
| 9 | 1 |
| 10 | 7,1 |
| 11 | 1 |
| 12 | 7,1 |
| 13 | 1 |
| 14 | 9,1 |
| 20 | 7,1 |
我需要 smt like: SELECT id, login FROM users u WHERE id IN (SELECT id FROM users u1 WHERE *referrers count more than 1000*)
,但我不明白我应该在*..*
. 为了更清楚地看到这种情况,我需要从第一个查询中获取当前用户 id 并将其添加到子查询中的%LIKE%
语句中,但是如何?喜欢:
`SELECT
id, login
FROM users u
WHERE id IN
(SELECT id FROM users u1 WHERE count((SELECT * FROM users u2 WHERE refer LIKE %u1.id%) > 1000)`
但是如何以正确的方式做到这一点?
解决方案
您可以为此使用字符串函数:
select id, login
from users
where char_length(referrers) - char_length(replace(referrers, ',', '')) >= 99
,
这通过计算可以在列中找到多少来起作用referrers
:99 个逗号表示有 100 个值。
最重要的是,您应该修复您的数据模型:您应该有一个单独的表来存储用户/引用者元组,而不是使用分隔列表,每行一个元组。在表列中存储分隔列表是关系数据库中的典型反模式,通常应该避免:您可以在这篇著名的 SO 帖子中阅读更多相关信息。
推荐阅读
- c# - 通过匹配文本的字符串部分删除重复项
- testing - 无法重复使用 Https 测试脚本记录器来完成操作,因为响应代码 - 401 显示
- powershell - 如何在powershell的XML数组中查找变量值?
- iis - 状态 200,sc-win32-status 为 64 大请求
- javascript - onClick 需要 2 次点击
- javascript - 将 RX 与 yeoman 生成器一起使用
- java - 从 jar 与 IntelliJ 运行时,Spring 以不同的顺序自动装配 bean - 无法启动 bean 'subProtocolWebSocketHandler' 没有处理程序
- sql - SQL 错误:ORA-00933:从三个表中删除时 SQL 命令未正确结束
- php - 无法使用 php 读取数组中的重音名称
- r - 通过R中的逻辑从数据帧中提取数据