在点的基础上从一个表中找到一对记录

时间:2016-04-03 07:18:46

标签: php mysql

我需要查询或算法。无论最适合我在mysql中的问题。

我有名为

的用户表
  

用户{id,points,gender,photo}

有了

的pointgiven表
  

{id,//主键

     

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

     

compare_user1,// user1与user2进行比较

     

compare_user2,// user2与user1进行比较

     

selected_user_by_me //在compareUser1或compareuser2之间回答

     

}

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

  1. 配对用户点差异不得大于1000.例如user1 = 256 points,user2 = 2000 points,user3 = 1222 points所以正确的对是user1和user3。

  2. 如果用户比较任何一对,同一对将不会再来。

  3. 请帮我构建这个逻辑我使用的是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
    

1 个答案:

答案 0 :(得分:0)

我对第二张桌子的目的有点困惑。如果它仅用于比较并且您的数据集不是非常大,您应该能够获得如下信息:

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