我有 2 张桌子,tbl_students 和 tbl_inv。学生表包含学生的所有信息。我正在创建一个发票系统来为学生创建和保存发票(每月)记录。tbl_inv 可以为单个学生提供多张发票,但日期不同。我正在尝试创建一个数组,该数组将列出所有学生的最新发票、总数和按顶部最新发票日期排序的状态。我对使用 mysql 和 php 编程相当陌生,所以如果我的问题听起来很愚蠢,我深表歉意。这就是我的查询......
$query = "SELECT * FROM tbl_student
LEFT JOIN tbl_inv ON tbl_student.sid = tbl_inv.inv_sid
GROUP BY tbl_student.sid
ORDER BY tbl_inv.inv_date DESC";
这将创建一个数组,每个学生一行,但不显示最新的发票日期和详细信息。
如果有人可以提供帮助,我将不胜感激:-)
(将直接评论添加到现有答案中)
这是有效的最终查询..
SELECT
S.*,
TI2.*
FROM
tbl_student S
LEFT JOIN ( SELECT
TI.inv_sid,
MAX(TI.inv_id) LatestInvoice
FROM
tbl_inv TI
GROUP BY
TI.inv_sid ) PreQuery
ON S.sid = PreQuery.inv_sid
LEFT JOIN tbl_inv TI2
ON PreQuery.inv_sid = TI2.inv_sid
AND PreQuery.LatestInvoice = TI2.inv_id
ORDER BY
TI2.inv_id ASC
我使用学生表上名为 f_link 的字段让学生相互链接。如果学生有与其相关联的家庭成员,则 f_link 字段显示主 ID 号。如果没有家庭链接,则该字段仅显示 0。使用我的发票系统,我正在为学生和与他们链接的任何家庭成员创建发票。当前查询将不显示家庭成员的发票数据,但已开具发票。我想缩小这个查询范围,只显示 f_link 字段中为 0 的学生。