[英]Mysql check for last entry in table while inserting
我有一个表,该表具有2列Action_key
(用于存储loggedin
和optin
值)和Value
(用于存储0或1)
我的表具有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);
下面的查询给了我最后插入的行-很好。 但需要知道如何使用以下查询的rhe检查条件
$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
与最后一行基本上在同一行-则不应插入
如果您已经从$this->tableGateway->getLastInsertValue()
获得了最后一个ID ,并且Action_key和value分别为"logged_in"
和0
,则无需担心您的查询...
只需检查以下三个项目(列)是否匹配的记录:
SELECT * FROM `table` WHERE `id` = <last_id> # one you get from $this->tableGateway->getLastInsertValue() AND `Action_key` = 'loged_in' AND `value` = 0
检查从以上查询返回的记录数:
INSERT
新记录 UPDATE
只需检查以下三个项目(列)匹配的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:
INSERT
新记录 也
您可以检查Uid的最后一个值:
SELECT Action_key, value FROM table
WHERE Uid = uid
ORDER BY id DESC LIMIT 1;
这将返回目标Uid的最后一项。 然后,您可以匹配Action_key
和value
列以匹配记录...
您可以在子查询中使用这样的语句
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;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.