根据时间显示多个表并显示源表

So, for example, I have 3 tables

Table 1: name

id | name | time
 1 | Bob  | 20.42

Table 2: item

id | item   | time
 1 | Bottle | 18.42
 2 | Box    | 21.42

Table 3: food

id | Food | time
1 | Steak | 19.42

So I want to display them like this

From table item: 1 | Bottle
From table food: 1 | Steak
From table name: 1 | Bob
From table item: 2 | Box

Use UNION ALL:

select id, name
from (
    select * from name
    union all
    select * from item
    union all
    select * from food ) t
order by t.`time`
DROP TABLE IF EXISTS name;

CREATE TABLE name
(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
,name VARCHAR(12) NOT NULL
,time TIME NOT NULL
);

INSERT INTO name VALUES
(1,'Bob','20:42:00');

DROP TABLE IF EXISTS item;

CREATE TABLE item
(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
,item VARCHAR(12) NOT NULL
,time TIME NOT NULL
);

INSERT INTO item VALUES
(1,'Bottle','18:42:00'),
(2,'Box','21:42:00');

DROP TABLE IF EXISTS food;

CREATE TABLE food 
(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
,food VARCHAR(12) NOT NULL
,time TIME NOT NULL
);

INSERT INTO food VALUES
(1,'Steak','19:42');

SELECT *, 'name' source FROM name
UNION ALL
SELECT *, 'item' FROM item
UNION ALL
SELECT *, 'food' FROM food
ORDER BY time;
+----+--------+----------+--------+
| id | name   | time     | source |
+----+--------+----------+--------+
|  1 | Bottle | 18:42:00 | item   |
|  1 | Steak  | 19:42:00 | food   |
|  1 | Bob    | 20:42:00 | name   |
|  2 | Box    | 21:42:00 | item   |
+----+--------+----------+--------+