php - SQL Select 查询返回不需要的数据

标签 php mysql select pdo

我有一个表,其中填充了来自查询的数据,该查询从数据库中选择学生编号。 View 如下:

Pic

正如您所看到的,同一条数据被多次输出。我有一个功能,无论出于何种原因,辅导员无法完成学生的学习,然后他们可以将学生发送给另一位辅导员。现在为了维护历史数据,我保留了所有这些数据。现在,当我回到我的学生查询时,它会显示所有当前数据(我想要的)和所有过去的历史数据(我不想要的)

这是我的sql语句:

    try 
                {
            $query = $dbh->prepare("SELECT 
        session.session_id AS id, 
        session.anum, 
        student.first, 
        student.last, 
        session.why, 
        session.studentcomments, 
        session.aidyear,
        support.counselorcomments 
        FROM 
        student INNER JOIN session ON student.anum = session.anum 
        INNER JOIN session_status ON session.status = session_status.status 
        LEFT JOIN support ON session.session_id = support.session_id
        WHERE session.status = 0 OR session.status = 2");

    $query->execute();
            $result = $query->fetchall();
                }
                    catch (PDOException $e) {
                    error_log($e->getMessage());
                    die($e->getMessage());
}

现在我设置数据库的方式就是我想要保持它正常工作的方式。我只是认为我查询数据的方式就是问题所在。

这是mysql中数据的图片:

enter image description here

编辑

现在,由于该问题已解决,所以我遇到一个错误,即每当发生插入时(更新 support.starttime 时间戳),上述记录就会消失,这是我更新的 sql

$query = $dbh->prepare("SELECT session.session_id AS id, session.anum, student.first, student.last, session.why, 
                        session.studentcomments, session.aidyear, support.counselorcomments FROM student LEFT JOIN 
                        session ON student.anum = session.anum LEFT JOIN session_status ON 
                        session.status = session_status.status LEFT JOIN support ON session.session_id = support.session_id
                        WHERE (session.status) IN (0) OR (session.status) IN (2) 
                        AND support.starttime = (SELECT MAX(support.starttime) FROM support INNER JOIN session ON session.session_id = 
                        support.session_id)");

最佳答案

如果我正确地阅读了您的问题,您只需要 session 表中的最新行,对吗?

如果是这样,您将需要在Where子句中实现子选择以获取MAX(session.starttime)。

如果是这种情况,您可以使用以下语法:

WHERE ...(what you already have)...
  AND session.startime = (SELECT MAX({YourTable}.starttime)
                            FROM {YourTable}
                           WHERE {YourTable}.anum = session.anum)

如果我有所涉及的所有表的详细信息,我会为您编写整个查询。这能回答您的问题吗?

更新答案:

您必须告诉子查询您想要哪个 session_id 的开始时间,您可以通过将子查询表与主查询结果集连接起来来完成此操作。

您的子查询应该是:

(选择最大(a.starttime) FROM 支持 WHERE a.session_id = session.session_id)

关于php - SQL Select 查询返回不需要的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14550981/

相关文章:

javascript - JavaScript 中的切换和选择

php - 有效检查数据库中是否存在值

php - 从分类法和日期压缩附加图像

MySql - 如何选择发生警告的行?

mysql - 使用bundler来要求dll和gem

MySQL 按最高分排序

jquery选项选择在chrome中不起作用

php - 在 PHP 中索引 excel 文件

php - 为什么MYSQL Server "go away"在PHP 5.4.11下,在5.3.17下却不是?

mysql - 在 Go 中使用查询参数获取记录