我需要一个查询或算法。不管对我在mysql中遇到的问题有什么好处。
我有一个名为
用户{id,点数,性别,照片}

指针给定的表
{id,//主键
compare_by_user_id,//选择最佳用户的用户
比较用户1,//user1与user2比较
比较用户2,//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

关于php - 在点的基础上从一个表中找到一对记录,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36382654/

10-12 16:24