我有一个表,该表有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
列自动递增。
更新
下面是通过检查条件插入即时消息的方式。
现在我需要条件来检查新插入的行是否与上一条记录的Value
,Id
和Uid
具有相同的值,否则应该插入。
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 loggedin
,Value 1
和Uid 1608
进行输入-它不会插入(理想情况下应该插入)
不应插入的条件
1)具有表的现有数据-如果我插入Action_key optin
,value 1
和Uid 1608
-与最后一行基本在同一行-则不应插入
答案 0 :(得分:1)
如果您已经拥有$this->tableGateway->getLastInsertValue()
中的最后一个ID 和 Action_key 和值为"logged_in"
和{{1 }},则无需担心您的查询...
只需检查这三个项目(列)是否匹配的记录:
0
检查上述查询返回的记录数:
SELECT * FROM `table`
WHERE `id` = <last_id> # one you get from $this->tableGateway->getLastInsertValue()
AND `Action_key` = 'loged_in'
AND `value` = 0
您的新记录更新
只需检查以下三个项目(列)匹配的 Uid :
INSERT
匹配上述查询返回的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;