通过compare方法在SQL中排序

时间:2014-02-16 00:23:57

标签: php mysql sql sorting compare

假设我的数据库中存在以下情况:
第一个元素是用户ID,第二个元素是一些数据,最后一个是标记。

1-1-1
1-2-2
1-3-4

2-4-1
2-2-1

3-1-5
3-3-1
3-2-5

4-2-2
4-1-1

5-4-1
5-6-2

如果数据在另一个用户ID中,如何对SQL查询ID进行排序和返回,这些ID将按标记排序。
示例:如果我将具有ID 1的用户数据与其他人进行比较,则必须返回以下内容:

4-2-2
4-1-1

2-4-1
2-2-1

3-1-5
3-3-1
3-2-5

因此排序将按顺序返回数据:4,2,3。

然后排序! 我想更详细地说: 请看:

1-1-1
1-2-9
1-4-2

2-1-5
2-2-2
2-5-4

3-1-3
3-3-3
3-2-8
3-4-6 
3-6-10

============= ============= 1 ============== === ===========
具有第二个ID的用户:
1:(10-1) - (10-5)=(4)= 4;
2:(10-9) - (10-2)= ABS(-7)= 7;
3:下一个数据是用户1中的内容 - 用户2中没有,我们轻松通过它;

具有第三个ID的用户:
1:(10-1) - (10-3)=(2)= 2;
2:具有3rt id的用户中缺少下一个数据;
3:(10-9) - (10-8)= ABS(-1)= 2;
4:(10-2) - (10-6)=(4)= 4;
5:通过;

============== ============= 2 ============== ===== =========
然后我需要算一个结果:
所以它会: 用户2:COUNT =(4 + 7)= 11;
用户3:COUNT =(2 + 2 + 4)= 8;
并在金额上删除此结果:
用户2:COUNT = COUNT / 2 = 11/2 = 5.5;
用户3:COUNT = COUNT / 3 = 8/3 = 2.666666666666667;

============== ============= 3 ============== ===== =========

最后:
我想看看只排序数据,第一个用户没有排序的标记+结果:
所以,我将有下一行:

来自第一位用户:
2-5-4
来自第二位用户:
3-4-6
3-6-10

然后按标记+结果排序,最后我们将
1:3-6-10,原因:(10 + 2.666666666666667 = 12.666666666666667)
2:2-5-4,原因:(4 + 5.5 = 9.5)
3:3-3-3,原因:(3 + 2.666666666666667 = 5.666666666666667)

1 个答案:

答案 0 :(得分:0)

获取匹配用户的列表:

select t.user, count(*) as NumMatches
from table t join
     table t1
     on t.data = t1.data and
        t.mark = t1.mark and
        t1.userid = 1 and
        t.userid <> 1
group by t.user;

要获得他们的详细信息,我们必须加入其中:

select tu.*
from (select t.user, count(*) as NumMatches
      from table t join
           table t1
           on t.data = t1.data and
              t.mark = t1.mark and
              t1.userid = 1 and
              t.userid <> 1
      group by t.user
     ) tu join
     table t
     on tu.user = t.user
order by t.NumMatches desc, t.user;