고급.. 쿼리문 질문.... 정보
고급.. 쿼리문 질문....
본문
질문해도 될까염......... ㅋ
가중치 적용해서 한 행 뽑아내기입니다.
$sql = "select title, probability from table
order by rand() limit 1";
위 쿼리 돌리면 모든 행중에서 같은확률로 하나가 뽑아집니다..
컬럼 probability 에 40, 50, 90 식으로 가중치가 들어 있습니다.
그러니까,
title | probability
일번 | 10
이번 | 90
이렇게 들어 있다면...
위 쿼리를 돌렸을때
90%의 확률로 이번이 나오고
10%확률로 일번이 나오도록 가능할까요??
mysql입니다.. 오라클은 rank() 로 가능한걸로 아는데..........ㅜ
추천
0
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 ";
// 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";
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% 이런거 안될듯해요^^;;
두분다 답변감사함니다~~~!
$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";
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";

order by rand() * probability 하면 되지 않아요?

^^
대신 desc를 해야하겠습니다.
대신 desc를 해야하겠습니다.