gpt4 book ai didi

MySQL:有什么办法可以将这N个查询变成更少的查询吗?

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

我有一个包含 N 个整数的 user_id 列表,例如

[1001, 1023, 13452, 1679834, ...]

和一个表格:

CREATE TABLE content (
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
user_id INT,
content VARCHAR(100),
score INT
);

我需要从 user_id 中获取这 N 个整数,并为每个 user_id 获取前 3 个内容具有最高的分数。所以基本上我需要运行这个查询N次:

SELECT *
FROM content
WHERE user_id=1001
ORDER BY score DESC
LIMIT 3;

N 可能是一个非常大的数字。所以我非常想避免一一运行这些查询。

有什么方法可以减少我需要运行的查询数量吗?也许某种批量选择?

最佳答案

这应该有效:

$str_ids = implode(', ', $arr_ids);

SELECT id, user_id, content, score
FROM ( SELECT *, (@rownum := @rownum + 1) AS rownum,
case when @user_id IS NULL then @user_id := c.user_id when @user_id != c.user_id then CONCAT(@rownum := 0, @user_id := c.user_id) AS dummy_value
FROM ( SELECT *
FROM content
WHERE user_id IN ({$str_ids})
ORDER BY user_id ASC, score DESC) AS c, (@rownum := 1, @user_id := NULL) AS vars
HAVING rownum <= 3

也许有更好的方法来做到这一点。如果是这样;让我知道!

关于MySQL:有什么办法可以将这N个查询变成更少的查询吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9813250/

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