将人员的位置链接到某人SQL

时间:2016-04-10 20:42:23

标签: mysql sql

我正在尝试创建一个数据库来保存有关人员及其位置的信息,但我不确定如何将他们的位置链接到他们。我还想跟踪他们以前的位置。到目前为止我已经:

CREATE TABLE person (
`id` INT NOT NULL PRIMARY KEY,
`username` varchar(50) DEFAULT NULL,
`first_name` varchar(50) DEFAULT NULL,
`last_name` varchar(50) DEFAULT NULL
);

CREATE TABLE locations (
`location_name` VARCHAR(20) NOT NULL PRIMARY KEY,
`last_updated` datetime DEFAULT NULL    
);

CREATE TABLE persons_location (
`person_id` INT NOT NULL,
`location_name` VARCHAR(20) NOT NULL,
PRIMARY KEY(`person_id`, `location_name`)
);

它目前的工作方式与此类似,但这意味着我不能让多个人拥有相同的位置。

如何更改它以启用此功能?即用户 - 'Jim'的位置是Home,'Sally'也是如此,但如果他们更新了他们的位置,它就会保留它。

1 个答案:

答案 0 :(得分:0)

如果您想跟踪以前的位置,您需要一个列,指明某个人在某个位置的时间:

CREATE TABLE persons_location (
  person_id INT NOT NULL,
  location_name VARCHAR(20) NOT NULL,
  presence_time DATETIME NOT NULL,
  PRIMARY KEY(person_id, location_name, presence_time)
);

更新:获取此类人员的典型方式。最后的位置:

select
from
(
  select
    person_id,
    max(presence_time) as presence_time
  from person_location
  group by person_id
) last_time
join person_location pl on pl.person_id = last_time.person_id
                     and pl.presence_time = last_time.presence_time
join person p on p.id = pl.person_id
join location l on l.location_name = pl.location_name;