我是php和mysql的新手,需要一些帮助,所以请温柔一些. 我有一些代码,可以使用php ECHO填充一个HTML表. 声明是:

$query= "SELECT Distinct AgeGrp, Gender,Dist, Stroke, First, 
                Family, Name, Year, Time, Event, Date 
        FROM JLSSWIMMING1 
        WHERE Year = '7'  
        and Stroke = 'Freestyle' order by Time Asc Limit 1" ;  

我想添加更多的 Select 声明.这个 idea 是,通过对每个 Select 语句使用Order bt Time ASC和Limit 1,单个表将显示每个风格的最快条目,例如,一个自由泳条目,一个仰泳条目等.

$query2= "SELECT Distinct AgeGrp, Gender,Dist, Stroke, First, 
                Family, Name, Year, Time, Event, Date 
          FROM JLSSWIMMING1 
          WHERE Year = '7'  
          and Stroke = 'Backstroke' order by Time Asc Limit 1" ;

Thanks in advance

从研究看,我可能需要一个数组(而不是一个连接),但我在这一点上挣扎. 下面是我的当前代码:

<?php

    try {
        $pdo = new PDO("mysql:host=$servername;dbname=$dbname;charset=utf8", $username, $password);
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

        $query= "SELECT Distinct AgeGrp, Gender,Dist, Stroke, First, 
                        Family, Name, Year, Time, Event, Date 
                FROM JLSSWIMMING1 
                WHERE Year = '7'  
                and Stroke = 'Freestyle' Order by Time ASC" ;  

        $stmt = $pdo->prepare($query);     
        $stmt->execute();
        $result = $stmt->fetchAll(PDO::FETCH_ASSOC);

        if (count($result) > 0) {
            echo "<br>";
            echo '<table class="special-table">';
            echo '<thead class="fixed-header">';
            echo '<tr>
                <th>Pos.</th>
                <th class="left-align">Name</th>
                <th class="left-align">Stroke</th>
                <th>Yr</th>
                <th>Dist</th>
                <th>Time</th>
                <th>AgeGrp</th>
                <th>Gen.</th>
                <th>DAte</th>
                <th>Event</th>
                </tr></thead><tbody>';
                
                foreach ($result as $row) {
                    echo "<tr>
                            <td >" . $cnt++ ."</td>
                            <td class='left-align'>" . $row["Name"] . "</td>
                            <td class='left-align'>" . $row["Stroke"] . "</td>
                            <td >" . $row["Year"] . "</td>
                            <td >" . $row["Dist"] . "</td>
                            <td >" . $row["Time"] . "</td>
                            <td >" . $row["AgeGrp"] . "</td>
                            <td >" . $row["Gender"] . "</td>
                            <td >" . Date('d-m-y', strtotime($row['Date'])) . "</td>
                            <td >" . $row["Event"] . "</td>
                        </tr>";
                }
                echo "</table></div>";
          } else {
                echo "<br>";
                echo "<br>";
                echo "<div style='font-size: 42px;'>  No results found ";
        }
    } catch (PDOException $e) {
        die("Connection failed: " . $e->getMessage());
    }
    // Close the database connection
    $pdo = null;
?>

推荐答案

如果每个笔划在时间上没有平局,则可以使用此方法:

SELECT *
FROM JLSSWIMMING1
WHERE (Year, Stroke, Dist, Time) IN (
    SELECT Year, Stroke, Dist, MIN(Time)
    FROM JLSSWIMMING1
    WHERE Year = 7
    GROUP BY Stroke, Dist
);

或者,使用ROW_NUMBER() window function,您可以:

SELECT *
FROM (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY Stroke, Dist ORDER BY Time) AS rn
    FROM JLSSWIMMING1
    WHERE Year = 7
) AS tmp
WHERE rn = 1;

给你db<>fiddle块.

Php相关问答推荐

为什么PHP输出\n而不是实际创建一个新元素?

用户信息更新期间Laravel邮箱验证问题

当我们使用PHPUnit时,控制台中的--uses param到底起了什么作用以及如何使用?

在AJX请求中使用简写后,FormData出现非法调用错误

有什么方法可以阻止WordPress主题升级通知吗?

当主页和帖子的缩略图相同时,如何减少主页和帖子的缩略图

Chillerlan/php-iOS名称字段的QR vCard错误

返回WooCommerce中的所有已启用变体

在WooCommercestore 页面上显示库存产品属性的值

可以';exec、system和shell_exec PHP函数中的命令字符串上的字符数不得超过8175

未检测到laravel控制器

有没有办法像引用枚举一样引用注册表中的对象?

WooCommerce 相关产品(按 children 类别)作为排名数学主要类别的后备

如何在 Laravel 迁移中使用日期时间和天数?

WordPress 分页无法正常工作

WooCommerce 有关新订单的附加邮箱通知,其中包含具体详细信息

Windows 身份验证在 IIS 中验证什么?我可以在我的情况下禁用匿名身份验证吗?

带有 nginx 的 Symfony 不提供 .js 和 .css 文件

Symfony 自定义注销

将参数传递给 laravel 9 工厂