php - SQL中通过比较方法排序

标签 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:第 3 个 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
10年3月6日

然后按标记+结果排序,最终我们将得到:
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)

最佳答案

获取匹配用户的列表:

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;

关于php - SQL中通过比较方法排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21805623/

相关文章:

mysql - 如何将数据库集成到软件中

mysql - MyISAM和InnoDB一起查询时表锁定问题

C# SQL 查询阻塞服务器内存

mysql - SQL 连接实际上是如何工作的?

php - 如何分解字符串,编辑数据,然后在原始分隔符仍然存在的情况下分解它?

PHP 显示数组键高 1 个数字

php - 为什么发生occuer语法错误,意外的 ';',期望的 ')'(查看:/var/www/resources/views/home.blade.php) [duplicate]

sql - 检查某个行是否存在,否则选择不同的行

javascript - 从基于文本的内容中删除某些 html 标签

php - Laravel 5.1 测试 - 从数据库获取行以完成测试