고급.. 쿼리문 질문.... > 자유게시판

자유게시판

고급.. 쿼리문 질문.... 정보

고급.. 쿼리문 질문....

본문

질문해도 될까염......... ㅋ
가중치 적용해서 한 행 뽑아내기입니다.

$sql = "select title, probability from table
  order by rand() limit 1";

위 쿼리 돌리면 모든 행중에서 같은확률로 하나가 뽑아집니다..

컬럼 probability 에 40, 50, 90 식으로 가중치가 들어 있습니다.
그러니까,
title  |  probability
일번 | 10
이번 | 90

이렇게 들어 있다면...
위 쿼리를 돌렸을때
90%의 확률로 이번이 나오고
10%확률로 일번이 나오도록 가능할까요??
mysql입니다.. 오라클은 rank() 로 가능한걸로 아는데..........ㅜ

 

추천
0
  • 복사

댓글 7개

조건을 걸어 몇번부터 몇번까지 하면 되지 않을까도 싶네요.

// 1~10까지
$tmp_id = rand(1,10);

// 1이 나왔다면
if ($tmp_id == '1') {

    $tmp_sql = " where id = '1' ";

} else {
// 그외 2~10

    $tmp_sql = " where id = '2' ";

}

$sql = " select * from table $tmp_sql order by rand() limit 1 ";
create table p ( p int);
insert probability values (10),
(20), (20),
(30), (30), (30),
...
...
(90),(90),(90),(90),(90),(90),(90),(90),(90),(90) ;

select title, probability from tab inner join p on tab. probability = p.p
  order by rand() limit 1";
이렇게해봤어요......
$sql = "select probability+rand()*100 as pro, cate, probability from dd_situation
 order by pro limit 2";

퍼센트 정확히 맞진않지만 대강쓸 수 있을듯..ㅋ

유아원님꺼는 sql로 먼저 다 처리하고싶어서 안될듯하고요.. 엑스엠엘님거는 45% 이런거 안될듯해요^^;;
두분다 답변감사함니다~~~!
create table p ( p int);
insert probability values (0),(1),
(2),
(3),
...
...
(99) ;

select title, probability from tab inner join p on tab. probability < p.p
  order by rand() limit 1";
© SIRSOFT
현재 페이지 제일 처음으로