我需要查询或算法。无论最适合我在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之间回答
}
我想从具有以下条件的用户表中获取两对记录。
配对用户点差异不得大于1000.例如user1 = 256 points,user2 = 2000 points,user3 = 1222 points所以正确的对是user1和user3。
如果用户比较任何一对,同一对将不会再来。
我尝试了这个查询,其中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
答案 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