2016-12-26 1 views
0

두 이벤트 사이의 데이터베이스에서 시간차를 초 단위로 가져 오려고합니다. 데이터베이스에서 사용자 테이블에 다른 열이 있지만 상태 열로 작업하고 있습니다. 사용자가 웹 사이트에 주문한 경우 상태 열에 "보류 중"이 표시되고 에이전트가 확인하면 "성공"으로 전환됩니다. 내가 보류 중일 때와 성공을 보여줄 때 사이의 시간차 (초 단위)를 얻으려고합니다.두 db 열 상태 (또는 이벤트) 간의 시간 차이를 초 단위로 얻는 방법

NB : 예를 들어 누구든지 PHP에서 time() 함수를 설명 할 수 있다면 기쁠 것입니다.

+0

설명서에는 'time()'예제가 있습니다 (http://php.net/manual/en/function.time.php). 특정 문제가 있습니까? 따라서 레코드를 업데이트하는 데 걸리는 시간을 찾고 있습니까? – chris85

+0

예 Chris. 레코드를 업데이트하는 데 걸리는 시간. 미리 감사드립니다! – Joeanne

+0

DB로 할 수 있다고 생각하지 않습니다. PHP 측에서 업데이트 전과 후에 '마이크로 시간'을 저장할 수 있습니다. – chris85

답변

0

MySQL의 unix_timestamp() 기능을 사용할 수 있습니다. 테이블에 두 이벤트에 대한 레코드가 두 개 있고, eventTime이라는 열이 있다고 가정하면 다음과 같은 두 개의 쿼리를 통해 Epoch 이후의 각각의 초 수 인 두 값을 얻을 수 있습니다. 당신은 시간 차이를 전자로 후자를 빼고 얻을 수

select unix_timestamp(eventTime) ... where status='pending' 

select unix_timestamp(eventTime) ... where status='success' 

업데이트

질문을 다시 읽은 후, 나는 당신의 DB 설계는 인생에 대해 하나 개의 행이 있음을 추측 트랜잭션의주기 (pending에서 success까지). 이 경우 세 당사자 (상태를 으로 업데이트하는 에이전트, 상태를 success으로 업데이트하는 에이전트 및 두 이벤트 간의 시간차를 찾아야하는 에이전트)가 모두 동일한 스레드 인 경우 두 이벤트 시간을 메모리에 유지하고 차이를 계산할 수 있습니다.

그러나 3 인이 2 ~ 3 개의 다른 스레드라고 생각합니다. 이 경우에는 (처음 이벤트 시간의) 지식을 한 스레드에서 다른 스레드로 전달할 수있는 메커니즘이 필요하다고 생각합니다. 이 작업은 lastUpdateTime이라는 새 열을 추가하거나 시간 추적을 위해 새 테이블을 추가하여 수행 할 수 있습니다.

그런데 두 번째 방법을 사용하면 MySQL Trigger이 유용 할 수 있다고 생각합니다. 따라서 테이블이 업데이트 될 때마다 이벤트를 추적하는 데 사용되는 두 번째 테이블을 업데이트하는 또 다른 명령이 트리거됩니다 경과 시간의 시간). 이 방법을 사용하면 원본 테이블을 변경하지 않고 새 테이블을 추가 할 수 있습니다.

+0

감사합니다. 하지만 두 가지 질문이 있습니다. 첫째, 간단한 if와 else PHP 문이 두 레코드 사이의 시간을 확보하는 데 도움이 될 것이라고 생각하지 않습니까? [이벤트는 하나의 열에서 업데이트됩니다 (즉, 사용자의 경우 셀에서 '보류 중'에서 '성공'으로 업데이트 됨)]. – Joeanne

+0

두 번째로 lastupdate 시간을 표시하기 위해 동일한 테이블에 새 열을 추가하는 방법에 대해 설명했습니다. 어떻게 구현합니까? 방아쇠가 복잡해 보입니다. 감사합니다 – Joeanne

+0

시차는 t2-t1입니다. 업데이트 프로그램이 동일한 프로그래밍 스레드 인 경우 첫 번째 업데이트 전에 t1을 (예 : 메모리에) 기억하도록 코드를 작성할 수 있습니다. 그렇지 않다면 어떻게 든 t1에 대한 정보가 첫 번째 업데이터에서 두 번째 업데이터로 전달되어야하며, 두 번째 업데이터는 그 차이를 계산할 수 있어야합니다. – leeyuiwah

관련 문제