2014-06-12 4 views
-3

가 여기 내 테이블 구조SQL 쿼리 그래서 난 내 테이블에 이러한 열이

이다 사용자별로 가장 최근의 행을 반환 각 위치가 다릅니다. 또한 타임 스탬프가 그 때는 이제

index.php, chat.php, test.php, test1.php

을 가정 해 봅시다.

사용자 위치가인 UserId와 시간을 추가하십시오.

시간은 timestamp 형식입니다.

내 sql 쿼리가 각 사용자 ID에서 하나의 결과를 보여 주지만 최신 쿼리 만 표시하도록하고 싶습니다. 그래서 2에서 가장 최근에 테이블에 추가 된 행을 보여줍니다. 또한 나는 15 분이나 그 이상의 회동 시간을 가진 결과를 보여주기를 원하지 않습니다.

예를 들어, 나는 단지 두 개의 행을 반환하는 것으로 나타납니다.

내가 뭘해야하는지 알고 있습니까?

가 나는 시도했다 :

SELECT * FROM session WHERE location='chat.php' GROUP BY userid 

이 개 결과를 반환하지만 임의의 하나를 반환하는 사용자 ID에 대해 여러 결과가있는 경우 내가 믿는, 그것은 또한 15 분 이상의 lastactivity이 결과를 반환합니다. 내가 MySQL의를 사용하고

------ 더 많은 정보 ------- 나는 모든 행에 대한 데이터베이스를 조회 할

곳에 위치 = 'chat.php'. 나는 가장 최근의 제출물에 의해 결정되는 사용자 ID 당 하나의 행만 원한다. 15 분 이상 된 것도 원하지 않습니다. 마지막으로 반환 된 행 수를 계산하여 testVar라는 변수에 넣을 수 있습니다.

도움을 받으실 수 있습니다.

+1

sql 바이올린을 게시하십시오. – Hackerman

+0

무엇을 의미합니까? 방법? – user3474238

+0

우선 SQL 설명서를 구하십시오. 시간 범위를 제한하기 위해'WHERE' 절을 사용합니다.그런 다음 'GROUP BY'및 'MIN'을 사용하여 주어진 사용자의 최신 타임 스탬프를 선택할 수 있습니다. 마지막으로, userid와 timestamp를 알고 있으면 테이블의'JOIN'을 가지고 나머지를 얻을 수 있습니다. – LSerni

답변

0

본질적으로 찾고있는 것은 가장 최근의 타임 스탬프가있는 사용자 이름과 위치를 원합니다. 따라서 마지막 활동이 가장 큰 레코드를 모두 무시하고 싶습니다.

Select sum(1) as testVar 
From session s 
Where location='chat.php' 
and datediff(minute, s.lastactivity, getdate()) < 15 
and not exists (Select * 
          From session s2 
          Where s.userid = s2.userid 
          and s2.lastactivity > s.lastactivity); 

각 레코드에 대해이 쿼리는 타임 스탬프가 더 최근 인 동일한 사용자에 대한 다른 레코드가 있는지 확인합니다. 있다면, 우리는 그 기록을 무시하고 싶습니다. 최근 활동이있는 레코드가없는 행만 원합니다. 이런 식으로 생각하는 것은 다소 이상하지만 논리는 동등합니다.

기본적으로이 쿼리는 사용자 당 하나의 행만 가져 오므로 그룹 기준은 필요하지 않습니다. (타임 스탬프가 정확하게 두 레코드에 동일하면 약간 털이 나게됩니다.이 경우에는 레코드가 반환되지 않습니다.)

+0

불행히도 나의 이전 의견은 여전히 ​​유효합니다. \t 나는 매우 혼란 스럽다. 나의 테이블 이름은 세션이다. 쿼리가 반환 된 후에는 testVar라는 변수에 반환되는 행의 양을 가져 오려고합니다. 그런 다음 testVar에서 마이너스 1을 입력하여 최종 결과를 얻습니다. 누군가가 나에게 전체 코드를 제공함으로써 나를 도울 수 있습니까? 답변을 제출해주세요. 그렇다면 올바른 것으로 표시 할 수 있습니다. :) – user3474238

+0

@ user3474238 testVar이 무엇인지 잘 모르겠습니다. 사용자의 행 수 (1을 뺀 수)를 원하십니까? – Jenn

+0

아니요, location = 'chat.php'인 모든 행에 대해 데이터베이스를 쿼리하고 싶습니다. 나는 가장 최근의 제출물에 의해 결정되는 사용자 ID 당 하나의 행만 원한다. 15 분 이상 된 것도 원하지 않습니다. 마지막으로 반환 된 행 수를 계산하여 testVar – user3474238

관련 문제