这可能是StackOverflow上有史以来最糟糕的标题,但请听我说完:
我有一个Tinder风格的数据库设计:
用户
ID, Name, etc, etc.. Not important
滑动
SwiperID, RecipientID, didLike
现在我正试图为用户X"拉入"一组潜在的刷单,这意味着我需要1:选择用户X没有刷过的所有用户ID,我的尝试:
SELECT * FROM users WHERE ID NOT IN ( SELECT recipientID FROM swipes WHERE swiperID = ? ) AND ID != ? LIMIT 0 , 30
这是有效的,但我的问题是第二个:
然后,我需要将这些新发现的、未刷过的用户,计算他们每个人过去被"刷过/未刷过"的次数,并将其与其他用户数据组合返回,即
COUNT(didLike)收件人ID=?AND didLike=真
但是,除了在代码中执行For循环,然后对找到的每个ID重复执行该查询数百次之外,我如何组合这些查询?!我一直在考虑问题太久了。
试试这样的
使用滑动次数加入用户表,然后进行筛选。
SELECT users.*, r.likes
FROM users
INNER JOIN (
select recipientId, sum(case when didlike=true then 1 else 0 end) as likes
from swipes
group by recipientId ) r on r.recipientId = users.ID
WHERE ID NOT IN ( SELECT recipientID FROM swipes WHERE swiperID = ? ) AND ID != ? LIMIT 0 , 30
我根本没有测试过,但它至少会让你朝着正确的方向前进。