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

标签 php mysql distinct fetch

我对 DISTINCT 关键字有点困惑。让我们猜测此查询将获取区分查询中设置的列的所有记录:

$query = "SELECT DISTINCT name FROM people";

现在,该查询正在获取所有区分“name”列的记录,同时仅获取“name”列。我应该如何只区分一列并同时获得所有需要的列?

方案如下:

需要列

  • 姓名
  • 姓氏
  • 年龄

不同的列

  • 姓名

该查询的正确语法是什么?提前致谢。

最佳答案

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

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);

注意:这不使用group by。并且,如果有多行具有相同的年龄,它将返回重复项。

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

关于php - MYSQL/PHP - 从由一列区分的表记录中选择所有列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39248261/

相关文章:

PHP PDO 语法错误或访问冲突 : 1064 on insert

如果第二个匹配,mysql从两个表中选择信息

mysql - SQL Case 不标记 null 时

sql - 加入并计算 2 个日期之间的不同值

php - 编码 php postgres json_encode

php - 登录未获取 user_id

MySQL,在执行 SELECT DISTINCT 查询之前合并 2 个或更多表?

sql - 从 1 列中选择不同的值

php - 返回 false 的回调函数 CodeIgniter

mysql - 什么是MySQL网络压缩算法