카테고리 : db
-
Mysql: Table 'name' is specified twice, both as a target for 'UPDATE' and as a separate source for data 오류 해결
아래의 Query는 계층형 카테고리에서 해당 노드와 상위 노드의 'itemCount'를 모두 1 증가 시키기 위한 Query다. UPDATE `storeCategory` SET itemCount=itemCount+1 WHERE (SELECT X.`_lft` FROM `storeCategory` as X WHERE X.`fullCode` = 'ab' LIMIT 1) BETWEEN `_lft` AND `_rgt`; 위 Query 에서는 자신의 Table의 검색 결과를 자신의 데이터를 변경하는데 사용하고 있다. 이 경우 아래와 같은 오류
-
Error Code: 2006 - MySQL server has gone away
MySQL이나 MariaDB를 사용하다보면 아래와 같은 오류를 만날 때가 있다. Error Code: 2006 - MySQL server has gone away 실행중인 Query가 중단되는 이유는 많지만 Error 2006의 경우는 대부분 접속이 끊어지거나 Packet의 크기와 관련이 있다. MySQL 공식 메뉴얼에서 B.5.2.9 MySQL server has gone away를 보면 관련된 정보를 확인할 수 있다. 일반적인 상황에서는 접속 중단보다는 Packet이 지정된 사이즈보다 커서 이 오류를 만나는 경우가 대부분이다.
-
MySql에서 숫자로 시작하는 문자열의 정렬 문제
[100A, 9B, 10C] 와 같은 문자열의 배열을 정렬한다고 가정하자. 인간이 생각할 때 바른 정렬 결과는 [9B, 10C, 100A]일 것이다.(사람에 따라 다를 수는 있지만 나는 이렇게 되길 원한다.) 그런데 이 문제를 프로그램에서 처리하려고 그냥 정렬을 수행한다면 어떤 결과가 나올까? 결과는 [100A, 10C, 9B] 이다. 간단히 결과를 확인하기 위해 php에서 돌려본 결과이다. <?php $a = ['100A', '9B', '10C']; sort($a); print_r($a); // 실행 결과 Array ( [0] =
-
MySql에서 float 필드 동일값 비교
이번에 작업하면서 mysql의 float 필드를 사용할 일이 있었다. 사실 오랜기간동안 mysql을 사용해 오면서 float 필드를 사용해 본 적이 많지 않았고 float 필드를 범위 검사가 아닌 동일값 검사를 할일이 없었다. 이번 작업에서는 float 필드의 동일값 검사를 하면서 당연히 아래와 같이 query를 만들면 될 줄 알았다. SELECT * FROM TABLE1 WHERE FloatField = 10.1; 그런데 분명 동일한 값이 있음에도 불구하고 검색된 결과가 없었다. 처음엔 어의가 없었다. 당연히 동일한 값이 있는데
-
두지점(WGS84 좌표)간 km 거리 계산 함수(php, mysql, javascript)
WGS84 좌표계는 위키피디아에 따르면 다음과 같다. World Geodetic System (WGS) 1984년에 제정된 범 지구적 측위 시스템으로 지도학, 측지학, 항법에 많이 사용된다. 통칭 및 약칭은 WGS 84 (aka WGS 1984, EPSG:4326, WGS84)라고 부르며, 2004년에 마지막으로 개정되었다. 이전에 쓰던 초안으로 WGS 72, WGS 66, 그리고 WGS 60이 있다. 기존에는 네이버 지도 등에서 KTM 좌표를 사용하기도 했지만 요즘엔 WGS84 좌표를 주로 사용한다. 이번에 작업을 하면서 WGS8
-
MySql의 SQL_CALC_FOUND_ROWS와 FOUND_ROWS()
MySql에는 SQL_CALC_FOUND_ROWS과 FOUND_ROWS() 라는 기능이 있다.일반적인 쿼리를 작성하는 상황에서는 크게 사용할 일이 없는 기능들이지만 알아두면 정말 유용하게 사용할 수 있다. 어디다 활용을 할지에 대해 보기 전에 각 기능이 무슨 역할을 하지는지부터 알아보자. 기본적인 동작은 mysqlkorea에 설명되어 있으니 참고하면 된다. SQL_CALC_FOUND_ROWS SQL_CALC_FOUND_ROWS는 SELECT 쿼리에 사용할 수 있는 MySQL 힌트로 쿼리 결과의 전체 row 수를 임시로 저장하게 합니