mysql在插入时检查表中的最后一个条目

w1e3prcc  于 2021-06-19  发布在  Mysql
关注(0)|答案(2)|浏览(369)

我有一个有两列的表 Action_key (哪个商店 loggedin 以及 optin 价值观)和 Value (存储0或1)
我的table有 Id 列自动增量。
更新
下面是我如何通过检查插入条件。
现在我需要一个条件来检查新插入的行是否与最后一条记录的值相同 Uid , Action_key 以及 Value ,否则应该插入。

$uniquedataoptininArray = array(   //except CreatedDate
        'Uid'=> $uid,
        'Action_key'=> $actionkey,
        'Value'=>$login_optin_value
        );
$userexists=  $this->getUserOptInLogTable()->getOptinLogindetails($uniquedataoptininArray);

if($userexists){

         echo 'record exist';

     }else{
          echo 'To be inserted';
          $result =  $this->getUserOptInLogTable()->insertdetails($dataArray);

下面的查询给出了最后插入的行-这很好。但我需要知道如何使用下面的查询来检查条件

$qry ="SELECT * FROM UserOptInLog WHERE Uid = ". $uid ." ORDER BY Id DESC LIMIT 1;";

当前问题。
应插入的条件
1) 如果我的下表充满了如图所示的值,那么现在我尝试插入一行 Uid 1608 , ActionKey loggedin 以及 Value 1 ,但不是插入。
2) 或者如果我输入一个值 Uid 1608 , Action_key optin 以及 value 1 -它不是插入(理想情况下应该插入)
不应插入的条件
1) 如果我插入 Uid 1608 , ActionKey loggedin 以及 value 0 -与上一行基本相同-不应插入

l2osamch

l2osamch1#

您可以在子查询中使用这样的语句

insert into tab
select q.* 
  from  
  (
  select *
    from tab
   where date_ = ( select max(date_) from tab where Action_key = 'loggedin' )
     and Value = 0
  ) q   
where date_ is not null;
bvuwiixz

bvuwiixz2#

如果你已经有了 $this->tableGateway->getLastInsertValue() 以及动作键和值 "logged_in" & 0 分别的话就不需要关心你的查询了。。。
只需检查以下3项(列)匹配的记录:

SELECT * FROM `table` 
WHERE `id` = <last_id>    # one you get from $this->tableGateway->getLastInsertValue()
AND `Action_key` = 'loged_in'
AND `value` = 0

检查从上述查询返回的记录数:
如果返回null, INSERT 你的新唱片
否则,就不管了
更新
只需检查这3项(列)匹配的uid:

SELECT Uid FROM `table`   # get just Uid column
WHERE `id` = <last_id>    # one you get from $this->tableGateway->getLastInsertValue()
AND `Action_key` = 'loged_in'
AND `value` = 0

匹配从上述查询返回的uid:
如果它与新的uid(要插入的记录)不匹配, INSERT 你的新唱片
否则,就不管了

您可以检查uid的最后一个值:

SELECT Action_key, value FROM table
WHERE Uid = uid 
ORDER BY id DESC LIMIT 1;

这将返回目标uid的最后一项。然后你可以匹配 Action_key 以及 value 匹配记录的列。。。

相关问题