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

时间:2018-11-15 06:09:22

标签: mysql zend-framework2

我有一个表,该表有2列-(void)joinRoom:(NSString *)groupJid { XMPPJID *JID = [XMPPJID jidWithString:groupJid]; _xmppRoom = [[XMPPRoom alloc] initWithRoomStorage:_xmppRoomHS jid:JID]; [_xmppRoom addDelegate:self delegateQueue:dispatch_get_main_queue()]; [_xmppRoom activate:_xmppStream]; [_xmppRoom joinRoomUsingNickname:_userNick history:nil]; [_xmppRoom fetchOwnersList]; [_xmppRoom fetchAdminsList]; [_xmppRoom fetchMembersList]; } (存储- (void)xmppRoom:(XMPPRoom *)sender didFetchOwnersList:(NSArray *)items { } - (void)xmppRoom:(XMPPRoom *)sender didFetchAdminsList:(NSArray *)items { } - (void)xmppRoom:(XMPPRoom *)sender didFetchMembersList:(NSArray *)items { } Action_key值)和loggedin(存储0或1)

我的表具有optin列自动递增。

更新

下面是通过检查条件插入即时消息的方式。

现在我需要条件来检查新插入的行是否与上一条记录的ValueIdUid具有相同的值,否则应该插入。

Action_key

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

Value

当前问题。

何时插入条件

1)如果我的下表中填充了如图所示的值,那么我现在尝试插入包含 $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;"; Uid 1608的行,但没有插入。

2)或者,如果我使用值ActionKey loggedinValue 1Uid 1608进行输入-它不会插入(理想情况下应该插入)

不应插入的条件

1)具有表的现有数据-如果我插入Action_key optinvalue 1Uid 1608-与最后一行基本在同一行-则不应插入

enter image description here

2 个答案:

答案 0 :(得分:1)

如果您已经拥有$this->tableGateway->getLastInsertValue()中的最后一个ID Action_key "logged_in"和{{1 }},则无需担心您的查询...

  1. 只需检查这三个项目(列)是否匹配的记录:

    0
  2. 检查上述查询返回的记录数:

    • 如果返回null,则SELECT * FROM `table` WHERE `id` = <last_id> # one you get from $this->tableGateway->getLastInsertValue() AND `Action_key` = 'loged_in' AND `value` = 0 您的新记录
    • 否则,请忽略

更新

  1. 只需检查以下三个项目(列)匹配的 Uid

    INSERT
  2. 匹配上述查询返回的Uid:

    • 如果它不匹配与新的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 您的新记录
    • 否则,请忽略

ALSO

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

INSERT

这将返回目标Uid的最后一项。然后,您可以匹配SELECT Action_key, value FROM table WHERE Uid = uid ORDER BY id DESC LIMIT 1; Action_key列以匹配记录...

答案 1 :(得分:0)

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

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;