MYSQL/PHP-从以一列区分的表记录中选择所有列

MYSQL/PHP-从以一列区分的表记录中选择所有列,php,mysql,distinct,fetch,Php,Mysql,Distinct,Fetch,我对DISTINCT关键字有点困惑。假设此查询将获得区分查询中设置的列的所有记录: $query = "SELECT DISTINCT name FROM people"; 现在,该查询正在获取区分列名的所有记录,同时只获取列名。我应该如何只区分一列,同时获得所有需要的列 这将是一项计划: 所需栏目 名称 姓 年龄 区分列 名称 该查询的正确坐标轴是什么?提前感谢。如果您希望每个名称有一行,那么通常的方法是聚合查询: select name, max(surname) as surname,

我对DISTINCT关键字有点困惑。假设此查询将获得区分查询中设置的列的所有记录:

$query = "SELECT DISTINCT name FROM people";
现在,该查询正在获取区分列名的所有记录,同时只获取列名。我应该如何只区分一列,同时获得所有需要的列

这将是一项计划:

所需栏目

名称 姓 年龄 区分列

名称
该查询的正确坐标轴是什么?提前感谢。

如果您希望每个名称有一行,那么通常的方法是聚合查询:

select name, max(surname) as surname, max(age) as age
from t
group by name;
MySQL支持group by的扩展,允许您编写如下查询:

select t.*
from t
group by name;
我强烈建议你不要使用这个。它是非标准的,值来自不确定的匹配行。甚至不能保证它们来自同一行,尽管它们在实践中通常来自同一行

通常情况下,你想要的是最大的年龄。如果是这样,请以不同的方式处理:

select t.*
from t
where t.age = (select max(t2.age) from t t2 where t2.name = t.name);
注意:这不使用分组方式。并且,如果有多个具有相同年龄的行,它将返回重复项


另一种方法使用变量——另一种MySQL特有的特性。但是,如果您仍在学习select,您可能应该等待了解变量。

DISTINCT在您获取的所有列中都是不同的。因此,如果两个人有相同的名字和年龄,但姓氏不同,你会得到两行。这里的预期结果是什么?如果我的例子发生了,你想得到哪个姓氏?简单到:选择DISTINCTname、姓氏、年龄FROM people?@Riad它使用的是静态定义的列,但在使用所有选择器*时会出现mysql错误。思想?谢谢。@MagnusEriksson预期的结果是从一个表中获取所有记录,而不是按列获取重复的记录。在定义表时,我没有将列设置为唯一键,因为表本身用于存储重复记录,然后对其进行处理。我想您误解了我的问题。如果你有两行:name1,name1,age1和name1,name2,age1,如果你想在firstname上区分开来,你希望这两行中的哪一行?姓1或姓2的那个?如果年龄值也不同,同样的问题也会出现。谢谢回答!所以不同的KeyWork对我要找的东西没用,对吧?如果我理解您的答案,您推荐的方法是通过获取某列的最大记录来手动分组记录。