RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 779943
Accepted
Ivan Petrov
Ivan Petrov
Asked:2020-02-04 15:24:25 +0000 UTC2020-02-04 15:24:25 +0000 UTC 2020-02-04 15:24:25 +0000 UTC

高级评级输出

  • 772

有一个 MySQL 表(用户),其中数据是 id、name、points。我需要得到 3 行:1 人得分多,我和 1 人得分少。例子 请帮助如何做到这一点?

php
  • 2 2 个回答
  • 10 Views

2 个回答

  • Voted
  1. Best Answer
    Mike
    2020-02-04T17:24:28Z2020-02-04T17:24:28Z

    MySQL 中的查询结果相当不平凡:

    select U.*
      from tab_users U
      join (
        select counter,id from tab_users
         where counter >= (select counter from tab_users where id=@my_id)
         order by (id=@my_id), counter limit 1
      ) P
        on     U.counter < P.counter
           or (U.counter >= P.counter and U.id in(P.id, @my_id))
     order by (U.id!=P.id), U.counter desc
     limit 3
    

    P 子查询获取评分大于或等于主帖子(“我”)的帖子的评分和 id。在这种情况下,如果有多个记录与主要记录具有相同的评分,则除主要记录外,将采用其中任何记录。如果没有找到更高或相同等级的记录,则将采用主要记录。

    之后,为子查询选择所有评分较低或相等的记录。此外,如果评分相等,那么您需要准确地获取一条记录,其 id 是在 P 子查询或主查询中找到的。对记录进行排序,以便子查询 P 中的记录必然是第一个。

    使用这种方法,主要条目位于中间。如果主条目的评分最高(“我是前 1”),我们还将获得 3 个条目,而主条目将是第一个。如果主记录位于评分的最底部,则查询仅返回 2 条记录——前一条和主一条(如果此时不适合您,您仍然需要使用 P 子查询的条件来获取此案例的另一条备份记录)。

    sqlfiddle.com上的示例

    选项 2:对所有记录进行编号并通过编号找到您需要的记录:

    select *
      from (
       select *, @n:=@n+1 num, @my_num:=if(id=@my_id,@n,@my_num)
         from tab_users, (select @n:=0, @my_num:=0) x
        order by counter
      ) X
      where num between @my_num-1 and @my_num+1
    
    • 4
  2. Ivan Petrov
    2020-02-04T16:17:55Z2020-02-04T16:17:55Z

    使它非常弯曲,但它有效。

    $qr_result = mysql_query("SELECT `id`, `name`, `counter` FROM `users` WHERE `job` = 0 ORDER BY `counter` DESC");
                        echo '<h3>Позиция</h3>';
                        echo '<table border="1" class="table" id="utable">';
                        echo '<thead>';
                        echo '<tr>';
                        echo '<th>№</th>';
                        echo '<th>Ф.И.О.</th>';
                        echo '<th>Баллы</th>';
                        echo '</tr>';
                        echo '</thead>';
                        echo '<tbody>';
                        $i=0;
                        $iidata = Array();
                        while($idata = mysql_fetch_array($qr_result)){
                            array_push($iidata, $idata);
                        }
                        foreach($iidata as $val){
                            if($val['id']==$data['id']){
                              if($i-1<0){
                              echo '<tr id="active">';
                              echo '<td>' . ($i+1) . '</td>';
                              echo '<td>' . $val['name'] . '</td>';
                              echo '<td>' . $val['counter'] . '</td>';
                              echo '</tr>';
                              echo '<tr>';
                              echo '<td>' . ($i+2) . '</td>';
                              echo '<td>' . $iidata[$i+1]['name'] . '</td>';
                              echo '<td>' . $iidata[$i+1]['counter'] . '</td>';
                              echo '</tr>';
                              echo '<tr>';
                              echo '<td>' . ($i+3) . '</td>';
                              echo '<td>' . $iidata[$i+2]['name'] . '</td>';
                              echo '<td>' . $iidata[$i+2]['counter'] . '</td>';
                              echo '</tr>';
                              }else{
                              echo '<tr>';
                              echo '<td>' . ($i) . '</td>';
                              echo '<td>' . $iidata[$i-1]['name'] . '</td>';
                              echo '<td>' . $iidata[$i-1]['counter'] . '</td>';
                              echo '</tr>';
                              echo '<tr id="active">';
                              echo '<td>' . ($i+1) . '</td>';
                              echo '<td>' . $val['name'] . '</td>';
                              echo '<td>' . $val['counter'] . '</td>';
                              echo '</tr>';
                              echo '<tr>';
                              echo '<td>' . ($i+2) . '</td>';
                              echo '<td>' . $iidata[$i+1]['name'] . '</td>';
                              echo '<td>' . $iidata[$i+1]['counter'] . '</td>';
                              echo '</tr>';
                              }
                            }
                            $i++;
    

    感谢那些愿意提供帮助的人!

    • 1

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    是否可以在 C++ 中继承类 <---> 结构?

    • 2 个回答
  • Marko Smith

    这种神经网络架构适合文本分类吗?

    • 1 个回答
  • Marko Smith

    为什么分配的工作方式不同?

    • 3 个回答
  • Marko Smith

    控制台中的光标坐标

    • 1 个回答
  • Marko Smith

    如何在 C++ 中删除类的实例?

    • 4 个回答
  • Marko Smith

    点是否属于线段的问题

    • 2 个回答
  • Marko Smith

    json结构错误

    • 1 个回答
  • Marko Smith

    ServiceWorker 中的“获取”事件

    • 1 个回答
  • Marko Smith

    c ++控制台应用程序exe文件[重复]

    • 1 个回答
  • Marko Smith

    按多列从sql表中选择

    • 1 个回答
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Suvitruf - Andrei Apanasik 什么是空? 2020-08-21 01:48:09 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5