PHP MySQL 按两列排序,每第一列限制 1 个结果

标签 php mysql

<分区>

你好,我有这张表:

CREATE TABLE `pupils` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`Name` varchar(24) NOT NULL DEFAULT '',
`Sex`  varchar(8) NOT NULL DEFAULT '',
`Age` SMALLINT UNSIGNED NOT NULL,
PRIMARY KEY (`id`)
) ENGINE = InnoDB CHARSET=utf8 COLLATE utf8_general_ci;
INSERT INTO `pupils` VALUES ( DEFAULT, 'Tom', 'male', 12);
INSERT INTO `pupils` VALUES ( DEFAULT, 'Audrina', 'female', 17);
INSERT INTO `pupils` VALUES ( DEFAULT, 'Darnell', 'male', 15);
INSERT INTO `pupils` VALUES ( DEFAULT, 'Dana', 'female', 11);
INSERT INTO `pupils` VALUES ( DEFAULT, 'Roberta', 'female', 14);
INSERT INTO `pupils` VALUES ( DEFAULT, 'Walton', 'male', 14);

М我的目标是为男女找到最年长的学生(这只是一个例子)。 我必须得到的结果如下:

Audrina
Darnell

我为此目的使用了这个 PHP 脚本:

<?php

include 'login.php';

function MySqlConnect( ) {
    global $host, $sql_username, $sql_password, $db_name;
    $con = new mysqli( $host, $sql_username, $sql_password, $db_name );
    if( $con->connect_errno ) { echo "ops1"; die( ); }
    return $con;
}

function GetNames( $con, &$all_names ) {
    global $tbl_pupils;
    if(!($result = $con->query( "SELECT Name,Sex FROM $tbl_pupils ORDER BY Sex,Age DESC" ) ) ) { echo "ops2"; die( ); }
    $names = [ ];
    while( $row = $result->fetch_row( ) ) {
        $curr_pupil = end( $names );
        if( !strcasecmp( $curr_pupil[1], $row[1] ) ) {
            $curr_pupil[0] = $row[0];
            $curr_pupil[1] = $row[1];
        } else {
            $names[ ] = array( $row[0], $row[1] );
        }
    }
    foreach( $names as &$curr_pupil ) $all_names[ ] = $curr_pupil[0];
    $result->free_result( );
}

$con = MySqlConnect( );
GetNames( $con, $all_names );
$con->close( );

foreach( $all_names as $name ) echo "$name<br>";

?>

我的问题是我可以创建一个 MySQL 查询来只获取必要的两行结果吗?

最佳答案

试试这个 从年龄在的学生中选择姓名(按性别从学生组中选择最大(年龄));

关于PHP MySQL 按两列排序,每第一列限制 1 个结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51422027/

相关文章:

php - 检查表中的 mysql 列是否有 php 中的重复项

php - PHP和C语言中的自增运算符

javascript - 在最后一页(或他来自的页面)重定向用户 PHP/JS

mysql - 需要一些编写 MySQL 查询的支持

php - 在 MySQL 数据库中存储 &(&) 的最佳方式

mySQL查询并匹配整个电子邮件地址

php - MySQL insert ignore in PHP with where statement?

php - jQuery 简单表单提交无需重新加载

php - PHP 和 MySQL 风格切换器

mysql - WHERE FIND_IN_SET(...)>0 和 WHERE FIND_IN_SET(...) 之间的区别