Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 将个人位置链接到个人SQL_Mysql_Sql - Fatal编程技术网

Mysql 将个人位置链接到个人SQL

Mysql 将个人位置链接到个人SQL,mysql,sql,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 TABL

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

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”和“Sally”都有位置主页,但如果他们更新了位置,它会保留位置主页。

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

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;

我以为我是在使用上次更新的字段来实现这一点的。另外,主要的问题是我不能让多个人在locations中具有相同的位置?last_updated应该取决于person,因此它属于关系表persons_location,否则您将强制此地址上的每个人都具有相同的last__updated@Andrew吉图斯:不是。上次更新只告诉你上次更新位置的时间,不管这意味着什么。但是你想知道某人何时在某个位置,所以你需要在persons\u location表中输入日期/时间。我添加了上一条评论中的数据。是因为位置是空的吗?每次添加位置时,我是否必须将位置添加到位置?此数据模型允许您在同一位置有多个人,因为PK由person+location组成。但是,您不能将同一个人和位置存储两次,但您希望这样做,因为您希望跟踪以前的位置。你当然想知道一系列的地点。只要你每个人只存储不同的位置,你就永远不知道哪个是最新的,哪个是以前的,等等。哦,谢谢,这更有意义。所以我想插入一个新的人和他们的当前位置我会使用什么查询?在我手动添加它之前,您添加了一个新的人物,其id、用户名、名字、姓氏值为50,‘HARRYSMITH’、‘Harry’、‘Smith’;您可以使用insert into persons\u location person\u id、location\u name、presence\u time值50“HOME”,now;输入他的位置;。谢谢你的帮助,我很感激。因此,如果我想找到用户的最新位置,我会怎么做?我有:从person p内部连接person\u location pl中选择p.*,l.*,pl.person\u id=p.id内部连接位置l ON l.location\u name=pl.location\u name,其中p.username='harry smith'我还订购了它,并将其限制为一个。