在 mysql 中使用 JOIN 语句获取最后插入的行
Get the last inserted row using JOIN statement in mysql
我正在尝试使用 mysql 和 php 创建一个简单的问题跟踪器。
用户可以在 tracker
table 中输入详细信息,它会立即添加到 tracker
和 statusmapping
table 中。
稍后用户可以更改 'status',然后将其添加(不更新)到 statusmapping
table.
我想合并这两个 table 并获得输出。当我得到输出时,我想从给定 id 的 statusmapping
table 中获取最后插入的数据。
我的tracker
table
+------------+---------+------------+----------------------+------------------------------------------------------+----------------------+
| tracker_id | tasksid | pagenameid | tracker_summary | tracker_comment | tracker_created_date |
+------------+---------+------------+----------------------+------------------------------------------------------+----------------------+
| 14 | 2 | 8 | some summary | some comment to display for the buggy page. | 2018-10-14 13:05:31 |
| 15 | 4 | 4 | revision for the faq | revision for the faq page and the comment goes here. | 2018-10-14 14:09:27 |
+------------+---------+------------+----------------------+------------------------------------------------------+----------------------+
和statusmapping
table。第二列 trackerid
是 FK
对应 tracker
table.
+------------------+-----------+----------+---------------------+----------------------+
| statusmapping_id | trackerid | statusid | statusmapping_date | statusmapping_reason |
+------------------+-----------+----------+---------------------+----------------------+
| 4 | 14 | 1 | 2018-10-14 13:05:31 | Newly opened! |
| 5 | 14 | 2 | 2018-10-14 13:34:04 | This issue is closed |
| 6 | 15 | 1 | 2018-10-14 14:09:27 | Newly opened! |
+------------------+-----------+----------+---------------------+----------------------+
到目前为止我试过了。我得到 NULL
列 statusid
。但是最后插入的id是statusmapping
table中的2
。我怎么得到那个。
SELECT
trk.tracker_id,
trk.tracker_summary, trk.tracker_comment,
stm.statusid
FROM trackers trk
LEFT JOIN statusmapping stm ON trk.tracker_id = (SELECT MAX(trackerid) FROM `statusmapping`)
GROUP BY trk.tracker_id
这是输出。
+------------+----------------------+------------------------------------------------------+----------+
| tracker_id | tracker_summary | tracker_comment | statusid |
+------------+----------------------+------------------------------------------------------+----------+
| 14 | some summary | some comment to display for the buggy page. | NULL |
| 15 | revision for the faq | revision for the faq page and the comment goes here. | 1 |
+------------+----------------------+------------------------------------------------------+----------+
- 在单独的 Derived Table 中,您可以获得
tracker_id
的最后更新日期时间。使用该值连接到主表,以获取 tracker_id
. 的最后一个条目
尝试以下操作:
SELECT
trk.tracker_id,
trk.tracker_summary,
trk.tracker_comment,
stm.statusid
FROM trackers trk
INNER JOIN statusmapping stm
ON trk.tracker_id = stm.trackerid
INNER JOIN (SELECT trackerid,
MAX(statusmapping_date) AS max_statusmapping_date
FROM statusmapping
GROUP BY trackerid) AS dt
ON dt.trackerid = trk.tracker_id AND
dt.max_statusmapping_date = stm.statusmapping_date
我正在尝试使用 mysql 和 php 创建一个简单的问题跟踪器。
用户可以在 tracker
table 中输入详细信息,它会立即添加到 tracker
和 statusmapping
table 中。
稍后用户可以更改 'status',然后将其添加(不更新)到 statusmapping
table.
我想合并这两个 table 并获得输出。当我得到输出时,我想从给定 id 的 statusmapping
table 中获取最后插入的数据。
我的tracker
table
+------------+---------+------------+----------------------+------------------------------------------------------+----------------------+
| tracker_id | tasksid | pagenameid | tracker_summary | tracker_comment | tracker_created_date |
+------------+---------+------------+----------------------+------------------------------------------------------+----------------------+
| 14 | 2 | 8 | some summary | some comment to display for the buggy page. | 2018-10-14 13:05:31 |
| 15 | 4 | 4 | revision for the faq | revision for the faq page and the comment goes here. | 2018-10-14 14:09:27 |
+------------+---------+------------+----------------------+------------------------------------------------------+----------------------+
和statusmapping
table。第二列 trackerid
是 FK
对应 tracker
table.
+------------------+-----------+----------+---------------------+----------------------+
| statusmapping_id | trackerid | statusid | statusmapping_date | statusmapping_reason |
+------------------+-----------+----------+---------------------+----------------------+
| 4 | 14 | 1 | 2018-10-14 13:05:31 | Newly opened! |
| 5 | 14 | 2 | 2018-10-14 13:34:04 | This issue is closed |
| 6 | 15 | 1 | 2018-10-14 14:09:27 | Newly opened! |
+------------------+-----------+----------+---------------------+----------------------+
到目前为止我试过了。我得到 NULL
列 statusid
。但是最后插入的id是statusmapping
table中的2
。我怎么得到那个。
SELECT
trk.tracker_id,
trk.tracker_summary, trk.tracker_comment,
stm.statusid
FROM trackers trk
LEFT JOIN statusmapping stm ON trk.tracker_id = (SELECT MAX(trackerid) FROM `statusmapping`)
GROUP BY trk.tracker_id
这是输出。
+------------+----------------------+------------------------------------------------------+----------+
| tracker_id | tracker_summary | tracker_comment | statusid |
+------------+----------------------+------------------------------------------------------+----------+
| 14 | some summary | some comment to display for the buggy page. | NULL |
| 15 | revision for the faq | revision for the faq page and the comment goes here. | 1 |
+------------+----------------------+------------------------------------------------------+----------+
- 在单独的 Derived Table 中,您可以获得
tracker_id
的最后更新日期时间。使用该值连接到主表,以获取tracker_id
. 的最后一个条目
尝试以下操作:
SELECT
trk.tracker_id,
trk.tracker_summary,
trk.tracker_comment,
stm.statusid
FROM trackers trk
INNER JOIN statusmapping stm
ON trk.tracker_id = stm.trackerid
INNER JOIN (SELECT trackerid,
MAX(statusmapping_date) AS max_statusmapping_date
FROM statusmapping
GROUP BY trackerid) AS dt
ON dt.trackerid = trk.tracker_id AND
dt.max_statusmapping_date = stm.statusmapping_date