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

Windows 10 에 Node.js 설치 후 jsdom 3 버전을 설치중 아래와 같은 오류가 발생

>npm install jsdom@3

https://www.visualstudio.com/ko-kr/products/visual-studio-express-vs

 - 필자는 위 링크의 Visual-studio-express를 설치하여 위 오류를 해결하였다. 어차피 C# 도 하니 겸사 겸사 깔았다.


https://www.microsoft.com/ko-kr/download/details.aspx?id=40784

위 재배포 가능 패키지를 설치해도 될것같기는 하다. 하지만 테스트는 못함


바로가기 앱: https://play.google.com/store/apps/details?id=com.orengineer.android.a209.floatingshotcut



'Node.js' 카테고리의 다른 글

가중치 구현 (DB,Node.js)  (0) 2015.10.23
node.js로 GooglePlay Crawling  (0) 2015.08.31
시작합니다  (0) 2015.08.07

node.js를 이용하 구글플레이 Crawling 방법 입니다.


Crawling을 위해서는 jsdom 이라는 모듈이 필요하며 설치 위치는 https://github.com/tmpvar/jsdom/tree/3.x 입니다.

(node.js에는 jsdom 3.x 버전만 설치 사용 가능 합니다.)


아래는 실제 코드 이며 사용법은 주석으로 되어 있습니다.


var jsdom = require('jsdom');

// ------ 중략 -----

app.get('/marketSeh',function(req,res){

var url_parts = url.parse(req.url,true);
var query = url_parts.query;
var gm_url;

gm_url = 'https://play.google.com/store/search?c=apps&q=' + escape(query.appname);
console.log(gm_url);

jsdom.env({
url:gm_url,
scripts: ['http://code.jquery.com/jquery.js'],
done: function (err, window) {           //페이지 호출이 완료되면 CallBack
var $ = window.jQuery;
var cards = $('.card-list .card'); //"card"로 시작하는 클래스를 포함하는 "card-list" 클래스 집합

// "." 은 클래스명 검색임을 "."이 없으면 태그명 검색임을 표시

var cardlen = cards.length;
var retvalue = []; //리턴값
var ii;

if(cardlen == 0){
res.json([{cover:'',title:'',subtitle:'',link:''}]);
return;
}

$.each(cards,function(i,card){        //세부 클래스들을 검색
var $card = $(this);
var _cover = $card.find('.cover-image').attr('src'); //이미지 url
var _title = $card.find('.title').attr('title'); //타이틀
var _subtitle = $card.find('.subtitle').text(); //서브타이틀
var _link = $card.find('h2 a').attr('href'); //링크
++i;
ii = i;


var obj = {cover:_cover.trim(),title:_title.trim(),subtitle:_subtitle.trim(),link:_link.trim() };

retvalue.push(obj);
});

if(cardlen = ii){
res.json(retvalue);
};
}
})

});


바로가기 앱: https://play.google.com/store/apps/details?id=com.orengineer.android.a209.floatingshotcut

'Node.js' 카테고리의 다른 글

가중치 구현 (DB,Node.js)  (0) 2015.10.23
Node.js Windows 10 에서 jsdom 3 설치 오류 해결  (0) 2015.09.05
시작합니다  (0) 2015.08.07


바로가기 앱: https://play.google.com/store/apps/details?id=com.orengineer.android.a209.floatingshotcut

'Node.js' 카테고리의 다른 글

가중치 구현 (DB,Node.js)  (0) 2015.10.23
Node.js Windows 10 에서 jsdom 3 설치 오류 해결  (0) 2015.09.05
node.js로 GooglePlay Crawling  (0) 2015.08.31

+ Recent posts