반응형
제목에 잘 정리 한 것 같아요. 특정 시간부터 다른 특정 시간까지 온라인 사용자를 선택하고 싶습니다. 내 테이블은 다음과 같습니다.
CREATE TABLE online (
id bigint(20) NOT NULL auto_increment,
`username` varchar (16) NOT NULL,
`ip` varchar(39) NOT NULL default '',
`time` datetime NOT NULL default '0000-00-00 00:00:00' ,
PRIMARY KEY (id)
);
지난 15 분
동안 온라인 상태였던 사용자 이름
을 반환하는 쿼리를 원합니다.
그리고 지난 60 분 동안 온라인 상태 였지만 지난 15 분 동안은
이 아닌 사용자에 대한 쿼리입니다. 따라서 쿼리는 동일한 값을 반환하지 않습니다. 이건 어떻게 해야할지 모르겠어요.
해결 방법
첫 번째 쿼리 :
SELECT username
FROM online
WHERE time > NOW() - INTERVAL 15 MINUTE
그리고 두 번째 :
SELECT username
FROM online
WHERE time BETWEEN NOW() - INTERVAL 60 MINUTE AND NOW() - INTERVAL 15 MINUTE
이 두 쿼리는 각 사용자가 온라인 테이블에 한 번만 표시된다고 가정합니다 (실제로이 경우 UNIQUE 제약 조건을 추가하여 적용해야 함).
사용자 이름이 테이블에 두 번 이상 나타날 수있는 경우 첫 번째 쿼리에 대해 SELECT 후에 DISTINCT를 추가하면되지만 두 번째 쿼리에는 약간 다른 접근 방식이 필요합니다.
SELECT DISTINCT username
FROM online
WHERE time > NOW() - INTERVAL 60 MINUTE
AND NOT EXISTS
(
SELECT *
FROM online
WHERE time > NOW() - INTERVAL 15 MINUTE
)
참조 페이지 https://stackoverflow.com/questions/4838120
반응형
'MySql' 카테고리의 다른 글
MySQL 동시성, 작동 원리 및 내 애플리케이션에서 처리해야합니까? (0) | 2020.10.20 |
---|---|
MySQL 테이블의 최대 행은 얼마입니까? (0) | 2020.10.20 |
MySQL 온라인 MySql / Sql 데이터베이스가있는 Xamarin Android 앱 (0) | 2020.10.20 |
MySQL은 시간 필드에 12 시간을 추가합니다. (0) | 2020.10.20 |
MySQL Laravel 5.5 비 객체의 'id'속성을 얻으려고합니다. (0) | 2020.10.20 |
댓글