MySQL 通过私钥/外键更新两列

问题描述

我有一个表来记录用户的活动,还有另一个表供用户跟踪他们的当前状态。 表 AccessLog 有两个来自用户的字段;有时我会收到 UserID,有时会收到 UserEmail。

有没有办法只填写一个字段(即 UserEmail)而其他字段(UserID)会以某种方式自动更新,或者在更新时有一些触发器?

  • 或者可能使用两个外键,因为我看到一个表上的 2 个引用是不可能的。

AccessLog 表如下所示:

CREATE TABLE AccessLog(
     ID int(11) AUTO_INCREMENT,IP varchar(45) NOT NULL DEFAULT '',UsEml varchar(60) NOT NULL DEFAULT '',VidID int(5) NOT NULL,URI varchar(255) NOT NULL DEFAULT '',LogDate timestamp NOT NULL DEFAULT Now(),browser varchar(200) NOT NULL DEFAULT '',SesID varchar(255) NOT NULL DEFAULT '',UsID int(11),PRIMARY KEY  (ID),CONSTRAINT LogUser
     FOREIGN KEY (UsID) 
        REFERENCES Users(UsID)
            ON UPDATE CASCADE
            ON DELETE SET NULL
)ENGINE=INNODB;

用户表:

CREATE TABLE Users(
     UsID int(11) AUTO_INCREMENT,UsName varchar(60) NOT NULL DEFAULT '',Active boolean NOT NULL DEFAULT '0',LastIP varchar(45) NOT NULL DEFAULT '',CurStat varchar(30) NOT NULL DEFAULT '',LastSesID varchar(255) NOT NULL DEFAULT '',LastCh timestamp NOT NULL DEFAULT Now(),PRIMARY KEY  (UsID),) ENGINE=INNODB;

现在我在 PHP 中使用函数返回其他字段,但似乎对我不起作用

从 UserEmail 中查找 UserID 的函数

function find_user_ID($rUSR =array()) 
{
// Check database connection
  if( ($DB instanceof MysqLi) == false) {
    return array(status => false,message => 'MysqL connection is invalid');
  }
  $query = "SELECT UsID FROM Users WHERE UsEml=? LIMIT 1";
  $qsql = $DB->prepare($query);
  $qsql->bind_param("s",$rUSR);
  $qsql->execute();
  $qsql->bind_result($result);
  $qsql->fetch();
  return $result;
  //$result = $qsql->get_result();

  if($qsql) {
    return array(status => true);
  }
  else {
    return array(status => false,message => 'Not Found');
  }
}

谢谢

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)