Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL@按ID对结果分组并按分数排序;问题_Php_Mysql_Sql_Sorting - Fatal编程技术网

Php MySQL@按ID对结果分组并按分数排序;问题

Php MySQL@按ID对结果分组并按分数排序;问题,php,mysql,sql,sorting,Php,Mysql,Sql,Sorting,我设置了以下db格式: id fid name time flag 1 224 Mike 112 3 2 555 John 98 5 3 224 Mike 101 0 4 121 Ann 80 1 5 224 Mike 55 7 6 121 Ann 150 4 我使用以下查询按fid(或名称)对它们进行排序和

我设置了以下db格式:

id  fid     name    time    flag
1   224     Mike    112     3
2   555     John    98      5
3   224     Mike    101     0
4   121     Ann     80      1
5   224     Mike    55      7
6   121     Ann     150     4
我使用以下查询按fid(或名称)对它们进行排序和显示,并按最短时间对它们进行排序:

SELECT id, fid, name, MIN(time), flag FROM dblist GROUP BY name ORDER BY MIN(time)
当我按照我想要的顺序获得输出时,这工作正常。比如:

name    time
Mike    55
Ann     80
John    98
但是,如果我试图显示fid、flag或与特定时间记录关联的任何其他字段,我会得到一些其他值(可能是查询首先遇到的)

我想得到的是以下格式:

id  fid     name    time    flag
5   224     Mike    55      7
4   121     Ann     80      1
2   555     John    98      5
我想知道是否有一种方法可以只用一个数据库和一些其他查询语法来完成这项工作


谢谢。

在两种情况下使用自联接:1、名称和每个名称的最小时间分数,分组结果不确定,其顺序不保证组中的最新或第一条记录

select t.* from t
join (SELECT name, MIN(`time`) `time`
 FROM t GROUP BY name) t1
on(t.name = t1.name and t.`time`=t1.`time`)
order by t.`time` 
使用此请求

SELECT
    id,
    fid, 
    name, 
    MIN(time), 
    flag 
FROM 
    dblist 
GROUP BY
    id, 
    fid, 
    name 
ORDER BY 
    MIN(time)
查询:

SELECT t.id, 
       t.fid, 
       t.name, 
       t.time, 
       t.flag
FROM t t
  LEFT JOIN t t1
    ON t.fid = t1.fid
    AND t.time > t1.time
WHERE t1.time is null
结果:

| ID | FID | NAME | TIME | FLAG |
|----|-----|------|------|------|
|  2 | 555 | John |   98 |    5 |
|  4 | 121 |  Ann |   80 |    1 |
|  5 | 224 | Mike |   55 |    7 |

这是因为MySQL处理分组的方式,所有其他数据都来自找到的第一条记录,我建议按名称和最小时间加入。必须警告的是,当两条记录具有相同名称的相同最小值时,此查询的输出将同时显示这两条记录。感谢演示。在我更改数据库名称后,这似乎是最好的解决方案。@LuisSiquot很抱歉在这里进行巫术,但是如果找到相同名称的最小值,那么避免显示重复条目的最佳方法是什么?谢谢。这也是一个很好的例子。正是我想要的。