Node.js에서 사용하던 가중치 적용 함수를 SQL Query로 구현 보았습니다.
결론은 로직으로 구현하는것 보다는 Query로 구현하는것이 간단하다 입니다.
------ 테이블 ------
t_item |
|
t_weight |
||
item_cd |
item_nm |
weight |
weight |
|
a |
장미 |
2 |
1 |
|
b |
튤립 |
5 |
2 |
|
c |
백합 |
8 |
2 |
|
d |
호박꽃 |
3 |
3 |
|
e |
무궁화 |
9 |
3 |
|
3 |
||||
4 |
||||
4 |
||||
4 | ||||
4 |
****************** 가중치 함수 - Node.js 구현 ******************
rows1[] = SELECT * FROM t_item 집합
var rownum = weightcheck(rows1[0]); //가중치로 선택된 Row의 번호 Get
var selrow = rows1[0][rownum]; //가중치로 선택된 Row Value
/** -----------------------------------------------------------------
* 가중치 계산, 배열의 크기를 작게하기 위하여 weight 은 1~9 까지만 사용
----------------------------------------------------------------- */
function weightcheck(rows){
var point = 0; //가중치
var beforePoint = 0; //이전 가중치
var totalweightn = totalweigh(rows,'weight'); //가중치 Column
var ran = Math.floor((Math.random() * totalweightn)+1); //1~가중치총합 사이의 랜덤한수
var i = 0;
//직전 가중치 + 현재 row의 가중치는 Band
for(i=0;i < rows.length;i++){
point = beforePoint + rows[i].adweight;
if(ran > beforePoint && ran <= point ){
break;
};
beforePoint = point; //현재 위치를 이전 위치로 저장 합니다.
};
return i;
};
/** -----------------------------------------------------------------
* 총 가중치 계산 (배열,가중치값 이름)
------------------------------------------------------------------- */
function totalweigh(list,weightnm){
var total=0; //총 가중치
for(var i = 0;i < list.length;i++){
total = total + list[i].adweight;
}
return total;
};
****************** 가중치 계산 - Query 로 구현 ******************
SELECT C.*
FROM (
SELECT A.* FROM t_item as A INNER JOIN t_weight as B
ON A.weight = B.weight //가중치 숫자만큼 Row 복제
) as C
ORDER BY rand() LIMIT 1; //복제된 Row 중 랜덤하게 하나의 Row를 반환
Node.js 에서 코드로 처리하는 것 보다 RDB에서 처리하는것이 더 깔끔합니다.
안드로이드용 바로가기APP https://goo.gl/LjcQgi -- 바로가기G
'Node.js' 카테고리의 다른 글
Node.js Windows 10 에서 jsdom 3 설치 오류 해결 (0) | 2015.09.05 |
---|---|
node.js로 GooglePlay Crawling (0) | 2015.08.31 |
시작합니다 (0) | 2015.08.07 |