根据点从一张表中找到一对记录


Find pair of record from one table on the basis of point

我需要一个查询或Algo。对我在mysql中的问题最好的方法。

我有一个名为的用户表

用户{id,积分,性别,照片}

具有的定点表

{id,//主键

compare_by_user_id,//选择最佳用户的用户

compare_user1,//user1与user2 比较

compare_user2,//user2与user1 比较

selected_user_by_me//在compareUser1或compareuser2 之间回答

}

我想从具有以下条件的users表中获取一对两条记录。

  1. 配对用户积分差不得超过1000。例如,user1=256分,user2=2000分,以及user3=1222分,因此正确的配对是user1和user3。

  2. 若用户比较任何一对,那个么同一对将不会再次出现。

请帮助我使用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