我需要一个查询或Algo。对我在mysql中的问题最好的方法。
我有一个名为的用户表
用户{id,积分,性别,照片}
和
具有的定点表
{id,//主键
compare_by_user_id,//选择最佳用户的用户
compare_user1,//user1与user2 比较
compare_user2,//user2与user1 比较
selected_user_by_me//在compareUser1或compareuser2 之间回答
}
我想从具有以下条件的users表中获取一对两条记录。
-
配对用户积分差不得超过1000。例如,user1=256分,user2=2000分,以及user3=1222分,因此正确的配对是user1和user3。
-
若用户比较任何一对,那个么同一对将不会再次出现。
请帮助我使用php和mysql构建这个逻辑
我尝试了这个查询,其中user_id 1是登录用户,他是男性。
SELECT *
FROM `users`
WHERE gender = 'Female'
AND id NOT IN (SELECT compare_user1
FROM pointgiven
WHERE user_id=1)
AND id NOT IN (SELECT compare_user2
FROM pointgiven
WHERE user_id=1)
ORDER BY `id` DESC
我对第二个表的用途有点困惑。如果只是为了比较,并且你的数据集不是很大,你应该能够得到这样的信息:
SELECT * FROM users us1
LEFT JOIN users us2 ON us1.id<>us2.id AND ABS(us1.points-us2.points)<=1000
GROUP BY IF(us1.id<us2.id,CONCAT(us2.id,':',us1.id),CONCAT(us1.id,':',us2.id)) /*one of many ways to avoid duplicates here */
ORDER BY us1.id