Php MySQL@按ID对结果分组并按分数排序;问题
我设置了以下db格式: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(或名称)对它们进行排序和
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很抱歉在这里进行巫术,但是如果找到相同名称的最小值,那么避免显示重复条目的最佳方法是什么?谢谢。这也是一个很好的例子。正是我想要的。