gpt4 book ai didi

mysql - 如何在 MySQL 中获取连接的 n 个结果

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

现在我正在使用一个循环来遍历我拥有的 100 个 ID。循环的每次迭代都会对数据库进行查询。在我看来,这根本没有效率。我想将其放入一个查询中。但至少可以说,这并不是我自己的方式。

这是我一直在研究的查询。它应该让我清楚地了解我正在尝试做什么。

SELECT
festival_backers.clown_id,
festival_backers.user_id
FROM festival_backers
INNER JOIN users ON users.id = festival_backers.user_id
LEFT JOIN festival_backers AS lesser ON lesser.festival_id = 1632 AND lesser.clown_id = festival_backers.clown_id
WHERE festival_backers.festival_id = 1632
AND lesser.clown_id IN (136541, 1000376982, 222329...)
AND lesser.user_id NOT IN (136541, 1000376982, 222329...)
GROUP BY festival_backers.clown_id
HAVING COUNT(lesser.clown_id) < 3
ORDER BY (festival_backers.amount + (festival_backers.free_vote / 10)) DESC
LIMIT 300;

我从这个查询中什么也没得到。

我正在寻找的结果。

clown_id    | user_id
-----------------------------
136541 | 21324
136541 | 57889
136541 | 89632
1000376982 | 56432
1000376982 | 57343
1000376982 | 23345
222329 | 45456
222329 | 77854
222329 | 67789

我正在努力吸引支持 clown 的用户。但只有三个人,最多也不过如此。我能够在获得超过三个的位置进行查询,但这不好(它们太多了)。

我使用NOT IN(以下示例)的原因是因为user_id也用于 clown ,因为他们也是用户。

AND lesser.user_id NOT IN [...]

我尝试这样做:https://stackoverflow.com/a/30269273/736910

有没有办法可以使用函数或其他东西来将连接返回的结果数量限制为三个?或者还有其他方法可以得到我想要的结果吗?

更新

我有不同的查询...这是另一个也不返回任何内容的示例:

SELECT
festival_backers.clown_id,
festival_backers.user_id
FROM festival_backers
INNER JOIN users ON users.id = festival_backers.user_id
INNER JOIN festival_backers AS lesser ON lesser.festival_id = 1632 AND lesser.clown_id = festival_backers.clown_id
WHERE festival_backers.festival_id = 1632
AND lesser.clown_id IN (136541, 1000376982, 222329...)
AND lesser.user_id NOT IN (136541, 1000376982, 222329...)
GROUP BY festival_backers.clown_id
HAVING COUNT(festival_backers.clown_id) < 3
ORDER BY (festival_backers.amount + (festival_backers.free_vote / 10)) DESC
LIMIT 300;

最佳答案

基于this answer来自您链接到的问题。

SELECT b.clown_id, b.user_id   
FROM festival_backers AS b
LEFT JOIN festival_backers AS lesser
ON b.clown_id = lesser.clown_id
AND b.user_id < lesser.user_id
AND lesser.user_id NOT IN (136541, 1000376982, 222329...)
WHERE b.festival_id = 1632
AND b.clown_id IN (136541, 1000376982, 222329...)
AND b.user_id NOT IN (136541, 1000376982, 222329...)
GROUP BY b.clown_id, b.user_id
HAVING COUNT(lesser.user_id) <= 5

请注意 lesser 上的条件您要比较的表必须放在 ON 中条款,而不是 WHERE条款。

这将为每个 clown ID 返回 5 个最低的用户 ID。如果您想通过用户 ID 之外的其他属性对它们进行排序,请更改 b.user_id < lesser.user_idb.otherColumn < lesser.otherColumn .

关于mysql - 如何在 MySQL 中获取连接的 n 个结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51407022/

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