我有一个表,其中填充了来自查询的数据,该查询从数据库中选择studentid数字。视图是这样的:
正如您所看到的那样,多次输出同一条数据。我有一个功能,无论出于何种原因,辅导员都无法完成学生,然后他们可以将学生送到另一位辅导员。现在为了维护历史数据,我保留了所有数据。现在当我回到我的学生阙然后它显示所有当前数据(我想要的)和所有过去的历史数据(我不想要)
这是我的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中数据的图片:
修改
现在,因为现在修复了这个问题,我遇到一个错误,当插件发生时(更新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)");
答案 0 :(得分:1)
如果我正确地阅读你的问题,你只需要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,您可以通过将子查询表与主查询结果集连接来执行此操作。
你的子查询应该是:
(SELECT MAX(a.starttime) 从支持a 在哪里a.session_id = session.session_id)
答案 1 :(得分:0)
SELECT DISTINCT
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
LEFT JOIN support
ON session.session_id = support.session_id
WHERE session.status IN (0,2)
使用DISTINCT作为ALberto告诉我要做的!谢谢alberto