브라우저 패턴이 너무 다양함...

하는데까지..



SELECT browser, COUNT(browser) AS cnt
FROM (
	SELECT 
		CASE
			WHEN user_agent LIKE '%Windows%Chrome%' THEN 'Chrome'
			WHEN user_agent LIKE '%iPad%Chrome%' THEN 'ChromeIPad'
			WHEN user_agent LIKE '%iPhone%Chrome%' THEN 'ChromeIPhone'
			WHEN user_agent LIKE '%Android%Chrome%' THEN 'ChromeAndroid'
			WHEN user_agent LIKE '%Mac%Chrome%' THEN 'ChromeMacOs'     
			WHEN user_agent LIKE '%Linux%Chrome%' THEN 'ChromeLinux'
			WHEN user_agent LIKE '%Chrome%' THEN 'ChromeEtc'
			
			WHEN user_agent LIKE '%Windows%Safari%' THEN 'Safari'
			WHEN user_agent LIKE '%iPad%Safari%' THEN 'SafariIPad'
			WHEN user_agent LIKE '%iPhone%Safari%' THEN 'SafariIPhone'
			WHEN user_agent LIKE '%Android%Safari%' THEN 'SafariAndroid'
			WHEN user_agent LIKE '%Mac%Safari%' THEN 'SafariMacOs'     
			WHEN user_agent LIKE '%Linux%Safari%' THEN 'SafariLinux'   
			WHEN user_agent LIKE '%Safari%' THEN 'SafariEtc'
			
			WHEN user_agent LIKE '%Windows%Firefox%' THEN 'Firefox'
			WHEN user_agent LIKE '%iPad%Firefox%' THEN 'FirefoxIPad'
			WHEN user_agent LIKE '%iPhone%Firefox%' THEN 'FirefoxIPhone'
			WHEN user_agent LIKE '%Android%Firefox%' THEN 'FirefoxAndroid'
			WHEN user_agent LIKE '%Mac%Firefox%' THEN 'FirefoxMacOs'     
			WHEN user_agent LIKE '%Linux%Firefox%' THEN 'FirefoxLinux'      
			WHEN user_agent LIKE '%Firefox%' THEN 'FirefoxEtc'
			
			WHEN user_agent LIKE '%MSIE 6%' THEN 'IE6'
			WHEN user_agent LIKE '%MSIE 7%' THEN 'IE7'
			WHEN user_agent LIKE '%MSIE 8%' THEN 'IE8'
			WHEN user_agent LIKE '%MSIE 9%' THEN 'IE9'
			WHEN user_agent LIKE '%MSIE 10%' THEN 'IE10'
			WHEN user_agent LIKE '%rv:11%' THEN 'IE11'
			
			WHEN user_agent LIKE '%iPad%' THEN 'AppIPad'
			WHEN user_agent LIKE '%iPhone%' THEN 'AppIPhone'
			WHEN user_agent LIKE '%Android%' THEN 'AppAndroid'

			WHEN user_conn_info LIKE '%Opera%' THEN 'Opera'
			ELSE 'EtcBrowser'
		END browser
		FROM USER_AGENT_HISTORY
		WHERE LOGIN_DT >= '20160517000001' AND LOGIN_DT <= '20160517999999'
	) AS browsers 
GROUP BY browser 
ORDER BY cnt DESC 



<script src="<c:url value="/resources/plugin/chart/datamap/d3.min.js" />"></script>
<script src="<c:url value="/resources/plugin/chart/datamap/topojson.js" />"></script>
<script src="<c:url value="/resources/plugin/chart/datamap/datamaps.kor.min.js" />"></script>
<div id="map" style="position: relative; width: 500px; height: 500px; border: 1px red solid"></div>
<script>
jQuery(document).ready(function(){
	var basic = new Datamap({
		element : document.getElementById("map"),
		scope : 'kor',
		fills : {
			defaultFill : "#ABDDA4",
			authorHasTraveledTo : "#fa0fa0",
			'colorTest1' : '#EAA9A8',
			'colorTest2' : 'red',
			'colorTest3' : 'blue'
		},
		setProjection : function(element) {
			var projection = d3.geo.equirectangular().center([ 0, 0 ])
								 .rotate([ -128, -36 ])
								 .scale(5000)
								 .translate([ element.offsetWidth / 2, element.offsetHeight / 2 ]);
			var path = d3.geo.path().projection(projection);
			return {path : path, projection : projection};
		},
		geographyConfig : {
			highlightBorderColor : '#bada55',
			popupTemplate : function(geography, data) {
				return '
' + geography.properties.name + ' - Hit:' + data.hit + '
' }, highlightBorderWidth : 2 }, data : { "KR.SO" : {"fillKey" : "colorTest1", "hit" : 5}, "KR.KG" : {"fillKey" : "colorTest2", "hit" : 50}, "KR.KN" : {"fillKey" : "colorTest3", "hit" : 100} } }); }); </script>


http://datamaps.github.io

특정 테이블의 정보를 특정 데이터로 업데이트 해달라는 요청이 가끔 들어온다.

물론 그 데이터는 엑셀로 올것이고, 현재 DB데이터와 1:1 맵핑되는 상황이 아닐것이죠.

그래서 1번의 방법과 같이  임시 테이블에 넣은다음에 쿼리를 돌리겠죠.


하지만 1번과 같이 하게되면 set 절이 반복적으로 Random 액세스를 해서 부담이 발생한다는군요.

뭐 지금까지 요청받은 부분에서 부담요소가 있었던것은 아니지만 , 동료분이 2번과 같은 Oracle 문법을 사용하길래 메모해본다.


우선적으로 위와 같은 성능을 해결하기위해서 "Updatable Join View" 방식을 사용한다고 합니다.

그런데 이 방법은 제약조건이 존재하는데 꼭 UK 또는 PK 설정이 되어 있어야 한다고합니다.

하지만 그렇지 않은 경우도 있을 수 있죠.

그래서 사용하는것이 BYPASS_UJVC 힌트절이라고 합니다.


머 자세한건 잘 모릅니다.

동료분이 사용하길래 메모해둠!!!


-- 1번
update test_a1 a 
set b = (
    select b
    from test_b1
    where a = a.a
)
where exists (select 1 from test_b1 where a = a.a);

-- 2번
update /*+ BYPASS_UJVC */
(
    select a.b a_b, b.b b_b
    from test_a1 a, test_b1 b
    where a.a = b.a
)
set a_b = b_b;

/*  
drop table test_a1;
drop table test_b1;
create table test_a1
(
    a number,
    b varchar2(10)
);
create table test_b1
(
    a number,
    b varchar2(10)
);
insert into test_a1 values(1, 'a1');
insert into test_a1 values(2, 'a2');
insert into test_b1 values(2, 'a2222');
*/


테스트 셈플 페이지 만들다가 Button 테그를 사용했더니, IE10에서 이상한 문제가 발생했다..
한참 삽질 끝네.. 아래와 같이 하니 해결이 되네..
예전에 IE6 특정 케이스에서 return false; 안 붙이면 클릭이 안되는 문제가 있더니만.. 또 삽질 무진장 했네..
웬만하면 INPUT 테그를 사용해야겠다!!!



마우스 오버 시 이전에 오버됐던 객체를 리턴한다.

create database aaa default character set utf8;

SET storage_engine=INNODB;

create or replace procedure sp_config_setting2
is   
    menuCd  varchar(4);
    menuUrl varchar(200);
    
    cursor curTb    
    is
    select menu_cd, menu_url from menu where menu_ctg = 'A' and use_yn = 'Y' and menu_view_yn = 'Y';
begin
    
    open curTb;
    
    loop
        fetch curTb 
        into menuCd, menuUrl;
        EXIT  WHEN  curTb%NOTFOUND; 
        
        if menuUrl is not null then
            
            if instr(menuUrl, '냠냠냨') = '0' then
                dbms_output.put_line(menuCd || '=' || menuUrl || '-' || instr(menuUrl, '냠냠냠'));
                
                update menu set menu_url = '냠냠냠' where menu_cd = menuCd;
            end if;
        end if;
    end loop;    
    
    close curTb;
end;

--execute sp_config_setting2();
--DROP PROCEDURE sp_config_setting2;

/**
 * 해당월 주의 최대값
 * @param dateStr		YYYYMM
 */
function getWeekCountOfMonth(dateStr) {
	var year  = Number(dateStr.substring(0, 4));
	var month = Number(dateStr.substring(4, 6));
	
	var nowDate = new Date(year, month-1, 1);

	var lastDate = new Date(year, month, 0).getDate();
	var monthSWeek = nowDate.getDay();

	var weekSeq = parseInt((parseInt(lastDate) + monthSWeek - 1)/7) + 1;

	return weekSeq;
}

jQuery(document).bind("mobileinit", function(){
	// 페이지 이동 시 back 버튼 표시 유무(1.7 버전부터는 default 값이 false 인듯)
	jQuery.mobile.page.prototype.options.addBackBtn = true;
	
	// 페이지 이동시 이동효과(기본값 fade | fade, pop, flip, turn, low, slidefade, slid, slideup, sliddown, none)
	jQuery.mobile.defaultPageTransition = "slide";
});
$.mobile.changePage(to, options)
to (string or object, required)
options (object, optional)

ex) (string, options)
$.mobile.changePage( "../alerts/confirm.html", {
transition: "pop", // 이동효과(fade, pop, flip, turn, low, slidefade, slid, slideup, sliddown, none)
reverse: false, // back button 클릭시 이전 페이지 이동 여부(default:false)
changeHash: false // hash 데이터 업데이트 여부
});


+ Recent posts