Получить последнюю вставленную строку с помощью оператора JOIN в MySQL - PullRequest
0 голосов
/ 14 октября 2018

Я пытаюсь создать простой трекер, используя mysql и php.Пользователь может ввести данные в таблицу tracker, и они будут сразу добавлены в таблицу tracker и statusmapping.

Позже пользователь может изменить «статус», который затем будет добавлен (не обновлен) в таблицу statusmapping.

Я хочу объединить эти две таблицы и получить вывод.Когда я получаю выходные данные, я хочу получить последние вставленные данные из таблицы statusmapping для данного идентификатора.

Моя tracker таблица

+------------+---------+------------+----------------------+------------------------------------------------------+----------------------+
| 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 таблица,Второй столбец trackerid - это FK для таблицы tracker.

+------------------+-----------+----------+---------------------+----------------------+
| 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.Но последний вставленный идентификатор - 2 в таблице statusmapping.Как я могу получить это.

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 |
+------------+----------------------+------------------------------------------------------+----------+

1 Ответ

0 голосов
/ 14 октября 2018
  • В отдельной производной таблице вы можете получить дату последнего обновления времени для 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 
...