因此,您在 c# 组中发布了您的问题。但是,我想为您提供一个在数据库中实现的解决方案,使其更加独立于您的程序。
您可能首先要做的是获取图像被喜欢和不喜欢的次数。该 SQL 语句应该为您执行此操作(如果您使用支持分组集的数据库,它可能更容易编写):
SELECT t1.liked_id as id, t1.c_liked, t2.c_disliked
FROM
(SELECT liked_id, COUNT(*) as c_liked FROM table GROUP BY liked_id) t1
LEFT JOIN
(SELECT disliked_id, COUNT(*) c_disliked FROM table GROUP BY disliked_id) t2
ON
t1.liked_id = t2.disliked_id
然后由您决定如何处理这些数字。在最外层的 SELECT 语句中,您可以放置一个非常复杂的函数,例如,您可以选择对不喜欢的权重小于对喜欢的权重。为了让您了解一个可能的非常简单的功能:
SELECT t1.liked_id as id,
(t1.c_liked/(t1.c_liked + t2.c_disliked) - t2.c_disliked/(t1.c_liked + t2.c_disliked)) as score
这将为您返回值 [-1, 1] (如果您愿意,您可以将其标准化为 [0, 1],但不必这样做),然后您可以按照以下示例对其进行排序:
SELECT t1.liked_id as id,
(t1.c_liked/(t1.c_liked + t2.c_disliked) - t2.c_disliked/(t1.c_liked + t2.c_disliked)) as score
FROM
(SELECT liked_id, COUNT(*) as c_liked FROM table GROUP BY liked_id) t1
LEFT JOIN
(SELECT disliked_id, COUNT(*) c_disliked FROM table GROUP BY disliked_id) t2
ON
t1.liked_id = t2.disliked_id
ORDER BY score