【发布时间】:2012-11-03 15:08:51
【问题描述】:
我有 2 个表转移和设备,其中每件设备可能有多个转移。我希望通过 project id 加入这 2 个表,并返回特定项目的每件设备的最新传输。
transfers table:
tid, pid, eid, date
equipment table:
eid, ename
在我的函数中,我发送变量 $pid 以仅整理特定项目 ID 的设备转移,该项目 ID 与转移表中的设备 ID 一起存储。
【问题讨论】:
我有 2 个表转移和设备,其中每件设备可能有多个转移。我希望通过 project id 加入这 2 个表,并返回特定项目的每件设备的最新传输。
transfers table:
tid, pid, eid, date
equipment table:
eid, ename
在我的函数中,我发送变量 $pid 以仅整理特定项目 ID 的设备转移,该项目 ID 与转移表中的设备 ID 一起存储。
【问题讨论】:
我认为您的要求可能对我来说仍然有点不清楚,但要仅返回特定 PID 的最新“传输”和“设备”行,请执行以下操作:
SELECT t.tid, t.pid, t.eid, e.ename, t.date
FROM transfers t
JOIN equipment e ON t.eid = e.eid
WHERE t.pid = ?
AND t.date = (SELECT MAX(t2.date) FROM transfers t2 WHERE t2.pid = ? )
让我知道这是否符合您的期望。如果没有,请给我更多关于每个表中的行的信息。
希望这会有所帮助,
约翰...
【讨论】:
SELECT t.tid, t.pid, t.eid, e.name, e.make, e.eqid, e.model, t.date FROM transfers t JOIN equipment e ON t.eid = e.eid WHERE t.pid = $pid AND t.date = (SELECT MAX(t2.date) FROM transfers t2 WHERE t2.eid = e.eid )
SELECT *
FROM transfers NATURAL JOIN (
SELECT pid, eid, MAX(date) date
FROM transfers
WHERE pid = ?
GROUP BY eid
) t JOIN equipment USING (eid)
【讨论】: