Mysql проверка последней записи в таблице при вставке - PullRequest
0 голосов
/ 15 ноября 2018

У меня есть таблица с двумя столбцами 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);

Приведенный ниже запрос дает мне последнюю вставленную строку - что нормально. но нужно знать, как я могу проверить условие, используя приведенный ниже запрос

$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 - в основном та же строка, что и в последней строке - она ​​не должна вставлять

enter image description here

Ответы [ 2 ]

0 голосов
/ 15 ноября 2018

Если у вас уже есть последний идентификатор из $this->tableGateway->getLastInsertValue() и Action_key & значение как "logged_in" & 0 соответственно, то в этом нет необходимости беспокоиться о вашем запросе ...

  1. Просто проверьте запись, где эти 3 элемента (столбца) совпадают:

    SELECT * FROM `table` 
    WHERE `id` = <last_id>    # one you get from $this->tableGateway->getLastInsertValue()
    AND `Action_key` = 'loged_in'
    AND `value` = 0
    
  2. Проверьте количество записей, возвращаемых из вышеуказанного запроса:

    • если возвращается ноль, INSERT ваша новая запись
    • остальное, просто игнорируй

ОБНОВЛЕНИЕ

  1. Просто проверьте Uid , где эти 3 элемента (столбцы) совпадают:

    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
    
  2. Соответствует идентификатору UID, полученному из вышеуказанного запроса:

    • если не не соответствует новому Uid (записи, которая будет вставлена), INSERT ваша новая запись
    • еще, просто игнорировать

ТАКЖЕ

Вы можете проверить последнее значение для Uid:

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

это вернет последний элемент для целевого Uid. Тогда вы можете сопоставить столбцы Action_key и value для сопоставления записей ...

0 голосов
/ 15 ноября 2018

Вы можете использовать такое утверждение с подзапросом

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;
...