MySQL의 가중치 무작위 선택
사용자가 "승수" 열에 따라 가중치가 부여된 MySQL 테이블에서 무작위 항목을 검색하려고 합니다. 승수가 0이면 가중치가 없음을 나타내고 값이 높을수록 선택 가능성이 높아집니다.
SELECT 및 RAND()를 활용하는 원래 쿼리에는 가중치를 구현하는 기능이 부족합니다. 이러한 제한을 극복하기 위해 대체 접근 방식이 확인되었습니다.
ORDER BY -LOG(1.0 - RAND()) / Multiplier
이 공식은 승수가 더 높은 항목에 더 높은 무작위 값을 효과적으로 할당합니다. 승수를 0으로 설정하면 0으로 나누기 오류가 발생하므로 이를 0으로 설정할 수 없다는 점에 유의하는 것이 중요합니다. 승수가 0인 항목을 제외하려면 WHERE 절을 적용할 수 있습니다.
WHERE Multiplier > 0
이러한 요소를 결합하여 다음 쿼리는 가중치가 부여된 무작위 선택을 달성합니다.
SELECT * FROM table WHERE Multiplier > 0 ORDER BY -LOG(1.0 - RAND()) / Multiplier LIMIT 1
이 수식은 다음을 보장합니다. 즉, 무작위 선택 프로세스의 무결성을 유지하면서 승수가 더 높은 항목이 선택될 확률이 더 높습니다.
위 내용은 MySQL에서 가중치가 적용된 무작위 선택을 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!