首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在MySQL中获得连接的n个结果

如何在MySQL中获得连接的n个结果
EN

Stack Overflow用户
提问于 2018-07-18 16:35:41
回答 1查看 61关注 0票数 0

现在,我正在使用一个循环来遍历我所拥有的100个ID。循环的每一次迭代都对DB执行一个查询。在我看来,这样做根本没有效率。我想把它放到一个查询中。但至少不能用我自己的方式说。

这是我一直在玩的查询。它应该让我对我想做的事情有一个很好的了解。

代码语言:javascript
复制
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;

我在这个查询中什么也得不到。

我正在寻找的结果。

代码语言:javascript
复制
clown_id    | user_id
-----------------------------
136541      | 21324
136541      | 57889
136541      | 89632
1000376982  | 56432
1000376982  | 57343
1000376982  | 23345
222329      | 45456
222329      | 77854
222329      | 67789

我想让那些支持小丑的用户。但其中只有三个不超过这一点。我能够查询我在哪里得到了超过三个,但这不是很好(他们只是太多)。

我之所以使用NOT IN (下面的示例)是因为user_id也用于小丑,因为它们也是用户。

代码语言:javascript
复制
AND lesser.user_id NOT IN [...]

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

是否有一种方法可以使用一个函数或什么东西来限制连接返回的结果数为3?或者有其他的方法来获得我正在寻找的结果?

更新

我有不同的疑问。下面是另一个不返回任何内容的示例:

代码语言:javascript
复制
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;
EN

回答 1

Stack Overflow用户

发布于 2018-07-18 19:15:35

基于您链接到的问题的this answer

代码语言:javascript
复制
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子句中。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51407022

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档