multicolumn unique key mysql insert
나는 mysql 데이터베이스를 가지고 있고 다음과 같은 테이블 구조를 가지고 있습니다.
CREATE TABLE `user_session_log` (
`stat_id` int(8) NOT NULL AUTO_INCREMENT,
`metric` tinyint(1) NOT NULL DEFAULT '0',
`platform` tinyint(1) NOT NULL DEFAULT '0',
`page_id` varchar(128) DEFAULT '_empty_',
`target_date` date DEFAULT NULL,
`country` varchar(2) DEFAULT NULL COMMENT 'ISO 3166 country code (2 symbols)',
`amount` int(100) NOT NULL DEFAULT '0.000000' COMMENT 'counter or amount',
`unique_key` varchar(180) DEFAULT NULL COMMENT 'Optional unique identifier',
`created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`stat_id`),
UNIQUE KEY `unique_key` (`unique_key`) USING BTREE,
KEY `target_date` (`target_date`)
) ENGINE=InnoDB AUTO_INCREMENT=21657473 DEFAULT CHARSET=utf8
제가 이루고자 하는 것은 날짜, page_id, country를 기준으로 활성 세션/유일 사용자를 기록하는 것입니다.현재 저는 unique_key로 여러 개의 삽입문을 생성하고 page_id와 날짜를 고유키에 추가하여 구매함으로써 이를 달성할 수 있지만, 저는 조금 다른 것을 원합니다.논리는 다음과 같습니다. unique_key( unique- semi 사용자 ID)의 새 행을 삽입합니다. 여기서 국가 = 이것, 날짜 = 이것, page_id = 이것입니다.해당 정보가 있는 행(동일 page_id, unique_key, 날짜+국가)이 이미 있는 경우 - 금액 = (금액) + 1 ; (session) 업데이트그래서 다음과 같은 검색을 할 수 있었습니다.
SELECT sum(amount) WHERE page_id = "something" AND target_date = "2018-12-21"
이렇게 하면 많은 세션이 주어질 겁니다
SELECT COUNT(*) WHERE page_id = "something" AND target_date = "2018-12-21"
그러면 해당 pagee_id에서 해당 날짜에 활성 사용자가 다수 발생할 수 있습니다.
SELECT COUNT(*) WHERE target_date = "2018-12-21"
그 날 총 사용자 수 결과를 얻을 수 있습니다.고유 지수에 대해서는 알고 있지만, 제가 찾고 있는 결과가 나올까요?
편집, 샘플 삽입:INSERT INTO `user_session_log` (`platform`,`page_id`,`target_date`,`country`,`amount`,`unique_key`,`created`,`modified`) VALUES ('1','page_id_54','2018-10-08','US',1,'ea3d0ce0406a838d9fd31df2e2ec8085',NOW(),NOW()) ON DUPLICATE KEY UPDATE `amount` = (amount) +1, `modified` = NOW();
그리고 표는 동일한 고유_키 + 날짜 + 국가 + 플랫폼 + page_id가 있는지 여부를 기준으로 중복 여부를 알아야 하며, 그렇지 않으면 새 행을 삽입하기만 하면 됩니다.지금은 다른 메트릭과 이미 생성된 날짜 + page_id를 포함한 unique_key를 생성한 후 해시함으로써 다르게 작업하고 있습니다.이렇게 하면 다른 고유 사용자를 하루 단위로 필터링할 수 있지만 고유 사용자가 가진 세션의 양이나 소프트웨어를 사용하는 기간 등은 필터링할 수 없습니다.
먼저 다음과 같이 고유해야 하는 모든 열에 고유 인덱스를 만듭니다.
ALTER TABLE user_session_log ADD UNIQUE INDEX idx_multi_column ON user_session_log (unique_key, date, country, platform, page_id);
그런 다음 INSERT...를 사용할 수 있습니다. 삽입/업데이트할 키 업데이트 쿼리를 복제합니다.
언급URL : https://stackoverflow.com/questions/52697599/multicolumn-unique-key-mysql-insert
'programing' 카테고리의 다른 글
Mysql 날짜 함수가 다음 시간 동안 작동하지 않습니다. (0) | 2023.10.15 |
---|---|
Woocommerce 주문내역에 상품선택비용 표시 (0) | 2023.10.15 |
공백을 무시하는 쿼리 (0) | 2023.10.15 |
jQuery $.browser가 감가상각되었습니까? (0) | 2023.10.15 |
특정 커밋샤를 위해 GitHub에서 .zip을 다운로드하는 방법? (0) | 2023.10.15 |