现在我正在使用一个循环来遍历我拥有的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
我正试图让那些支持小丑的用户参与进来。但其中只有三个,仅此而已。我可以在哪里查询到超过三个,但这并不好(它们太多了)。
我使用
NOT IN
(以下示例)是因为
user_id
也用于小丑,因为他们也是用户。
AND lesser.user_id NOT IN [...]
我试着这么做:
https://stackoverflow.com/a/30269273/736910
有没有一种方法可以使用一个函数或其他东西来限制一个连接返回的结果量为3?还是有其他方法可以达到我想要的结果?
使现代化
我有不同的疑问。。。下面是另一个也不返回任何内容的示例:
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;