gpt4 book ai didi

Mysql复杂数据问题

转载 作者:行者123 更新时间:2023-11-29 11:08:58 25 4
gpt4 key购买 nike

我有一个文章网站和一个建议箱,我建议在其中阅读更多文章。我想做的是建议最相关的测验,而不是随机挑选文章并展示它们。因此,我们假设读者正在阅读 ID 号为 19 的文章。在建议框中,我想显示也阅读过文章号 19 的人所阅读的文章。因此,如果 A 读了 19,26,30,B 读了正在阅读 19,因此他最感兴趣的是第 26,30 号文章。我有一个表,上面记录了用户使用其用户 ID 阅读的每一篇文章。

ID / USER ID / ARTICLEID
1 / 30 / 10
2 / 20 / 10
3 / 20 / 80
4 / 10 / 10
5 / 20 / 60
6 / 10 / 60
7 / 20 / 80
8 / 10 / 90

这里是想要的:获取用户当前正在阅读的文章的 ID -> 转到数据库并获取阅读本文的所有用户的 ID -> 获取这些用户阅读的所有文章的 ID ->按文章的用户数量对它们进行排序。这真的很令人沮丧,因为我没有太多 mysql 经验。所以 select 的基本命令似乎不起作用,我正在寻求帮助或只是想法,我会考虑执行它们。更新 1:需要输出

  • 获取阅读 ID 号为 10 的文章的用户 IDS:IDS:30/10/20
  • 查看该用户还阅读了哪些其他文章:80(1用户)/60(2 个用户)/90(1 个用户)
  • 最终输出:按订单排序的文章:60/90/80

最佳答案

我已经做了一个 sample 。我几乎确定这就是您要搜索的内容。我将描述它的一些片段

完整查询

SELECT count(`art_id`) as cnt, `art_id`
FROM user_art
WHERE `user_id` in (
SELECT DISTINCT `user_id`
FROM user_art
WHERE `art_id` = 10 -- Current Article ID to find other user
AND user_id <> 20 -- Current User Id to exclude from list
)
GROUP by `art_id`
ORDER BY cnt DESC , `art_id` DESC
LIMIT 1;

一步一步

输入数据

mysql>  SELECT * FROM user_art;
+----+---------+--------+
| id | user_id | art_id |
+----+---------+--------+
| 1 | 10 | 10 |
| 2 | 20 | 30 |
| 3 | 20 | 80 |
| 4 | 10 | 90 |
| 5 | 20 | 10 |
| 6 | 23 | 10 |
| 7 | 23 | 11 |
| 8 | 23 | 12 |
| 9 | 10 | 11 |
+----+---------+--------+
9 rows in set (0,00 sec)

mysql>

查找所有也阅读过同一篇文章的用户 ID

mysql> select DISTINCT `user_id`
-> FROM user_art
-> WHERE `art_id` = 10 -- Current Article ID to find other user
-> AND user_id <> 20; -- Current User Id to exclude from list
+---------+
| user_id |
+---------+
| 10 |
| 23 |
+---------+
2 rows in set (0,00 sec)

mysql>

查找用户列表阅读过的所有文章

查找按用户列表阅读的所有文章,并按用户 desc 和文章 ID desc 的计数排序 => 较高的文章编号 => 较新的文章

mysql> SELECT count(`art_id`) as cnt, `art_id`
-> FROM user_art
-> WHERE `user_id` in (10,23)
-> GROUP by `art_id`
-> ORDER BY cnt DESC , `art_id` DESC
-> ;
+-----+--------+
| cnt | art_id |
+-----+--------+
| 2 | 11 |
| 2 | 10 |
| 1 | 90 |
| 1 | 12 |
+-----+--------+
4 rows in set (0,00 sec)

mysql>

两个查询的组合

将两个查询与 LIMIT 组合以仅获取下一篇文章

mysql> SELECT count(`art_id`) as cnt, `art_id`
-> FROM user_art
-> WHERE `user_id` in (
-> SELECT DISTINCT `user_id`
-> FROM user_art
-> WHERE `art_id` = 10 -- Current Article ID to find other user
-> AND user_id <> 20 -- Current User Id to exclude from list
-> )
-> GROUP by `art_id`
-> ORDER BY cnt DESC , `art_id` DESC
-> LIMIT 1;
+-----+--------+
| cnt | art_id |
+-----+--------+
| 2 | 11 |
+-----+--------+
1 row in set (0,00 sec)

mysql>

关于Mysql复杂数据问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40952642/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com