kakao.maps.Size(width, height) : 크기 정보를 담고 있는 사이즈 객체를 생성한다.
kakao.maps.Point(x, y) : 화면 좌표 정보를 담고 있는 포인트 객체를 생성한다.
kakao.maps.Marker() : 마커를 생성한다.
kakao.maps.Marker().setMap(<Map>) : Marker를 <Map> 객체에 출력한다.
kakao.maps.Marker().setPosition(<LatLng>) : <LatLng> 위치로 Marker의 위치를 변경한다.
- setMap()을 사용하지 않으면 포지션만 변경된체 지도에 존재하는 마커는 움직이지 않는다.
kakao.maps.services.Status.<STATUS>
- services 라이브러리의 응답 코드가 상수로 정의되어 있다.
<STATUS> 종류
- OK : 검색 결과 있음
- ZERO_RESULT : 정상적으로 응답 받았으나 검색 결과는 없음
- ERROR : 서버 응답에 문제가 있는 경우
ex) kakao.maps.sevices.Status.OK : 검색 결과 있음
kaka.maps.services.Places() : 장소 검색 서비스 객체를 생성한다.
- 지도 객체를 인자로 넣을 경우, 검색에 필요한 옵션들 중 location이 자동으로 지도의 중심 조표로 설정되어 검색한다.
kakao.maps.services.Geocoder() : 주소-좌표간 변화 서비스 객체를 생성한다.
kakao.maps.services.Geocoder().coord2Address(x, y, callback, options)
- 좌표 값에 해당하는 구 주소와 도로명 주소 정보를 요청한다.
- 도로명 주소는 좌표에 따라서 표출되지 않을 수 있다.
- x Number : x 좌표, 경위도인 경우 longitude
- y Number : y 좌표, 경위도인 경우 latitude
- callback Function : 검색 결과를 받을 콜백함수
- result Array : 결과 목록 / 결과 상세는 로컬 REST API 좌표를 주소로 변환 의 응답결과 참고
- status Status : 응답 코드
- options Object
- input_coord Coords : 입력 좌표 체계. 기본값은 WGS84
kakao.maps.services.Geocoder().coord2RegionCode(x, y, callback, options)
- 좌표 값에 해당하는 행정동, 법정동 정보를 얻는다.
- x Number : x 좌표, 경위도인 경우 longitude
- y Number : y 좌표, 경위도인 경우 latitude
- callback Function : 검색 결과를 받을 콜백함수
- result Array : 결과 목록 / 결과 상세는 로컬 REST API 좌표를 행정구역정보로 변환 응답결과 참고
- status Status : 응답 코드
- options Object
- input_coord Coords : 입력 좌표 체계. 기본값은 WGS84
- output_coord Coords : 출력 좌표 체계. 기본값은 WGS84
CREATE TABLE BlackLists(
blackListId int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
userId int(11) NOT NULL,
blackUserId int(11) NOT NULL,
createdAt datetime NOT NULL DEFAULT NOW(),
updatedAt datetime NOT NULL DEFAULT NOW(),
FOREIGN KEY (userId) REFERENCES Users(userId) ON DELETE CASCADE,
FOREIGN KEY (blackUserId) REFERENCES Users(userId) ON DELETE CASCADE
);
-- MySQL DATE 검색
SELECT createdAt FROM Users WHERE createdAt > '2021-08-06 00:00:00';
SELECT createdAt FROM Users WHERE createdAt > '2021-08-06';
- DATETIME을 검색할 때 모든 형식을 작성하거나 해당하는 날짜만 작성해도 검색이 된다.
SELECT createdAt FROM Users WHERE createdAt >= '2021-08-06' AND createdAt < '2021-08-07';
==
SELECT createdAt FROM Users WHERE createdAt BETWEEN '2021-08-06' AND '2021-08-07';
- createdAt이 2021-08-06에 포함된 모든 데이터를 가져온다.
- WHERE 에서 createdAt을 기준으로 부등호 연산 하는 것 보다 속도가 20%가량 느리다.
-- /api/search/post 날짜 검색을 추가해서 검색기능을 넣어보자.
1. 지정한 Posts 인자만 출력
SELECT postId, title, postImg, content, maxMember, startDate, endDate, place FROM Posts
;
2. currentMember를 출력
SELECT p.postId, p.title, p.postImg, p.content, COUNT(c.userId) AS currentMember, p.maxMember, p.startDate, p.endDate, p.place
FROM Posts AS p
JOIN Channels AS c
ON p.postId = c.postId
GROUP BY c.postId
;
3. currentMember가 maxMember보다 작을 경우 출력하는 조건 추가
SELECT p.postId, p.title, p.postImg, p.content, COUNT(c.userId) AS currentMember, p.maxMember, p.startDate, p.endDate, p.place
FROM Posts AS p
JOIN Channels AS c
ON p.postId = c.postId
GROUP BY c.postId
HAVING currentMember < maxMember
;
4. 제목, 내용 검색 조건 추가
SELECT p.postId, p.title, p.postImg, p.content, COUNT(c.userId) AS currentMember, p.maxMember, p.startDate, p.endDate, p.place
FROM Posts AS p
JOIN Channels AS c
ON p.postId = c.postId
WHERE p.title LIKE '%G%'
OR p.content LIKE '%G%'
GROUP BY c.postId
HAVING currentMember < maxMember
;
5. 모든 태그 내용 출력
SELECT * FROM Tags;
6. 태그 중 해당하는 내용이 포함된 postId만 출력
SELECT DISTINCT postId FROM Tags WHERE tag LIKE '%G%';
7. 코드 병합
SELECT p.postId, p.title, p.postImg, p.content, COUNT(c.userId) AS currentMember, p.maxMember, p.startDate, p.endDate, p.place
FROM Posts AS p
JOIN Channels AS c
ON p.postId = c.postId
WHERE p.title LIKE '%G%'
OR p.content LIKE '%G%'
OR p.postId IN (SELECT DISTINCT postId FROM Tags WHERE tag LIKE '%G%')
GROUP BY c.postId
HAVING currentMember < maxMember
;
8. Posts 에서 해당하는 범위의 날짜만 출력 하도록 설정
SELECT postId
FROM Posts
WHERE startDate >= '2021-08-03 15:00:00'
AND startDate < '2021-08-04 15:00:00';
9. 코드 병합
SELECT p.postId, p.title, p.postImg, p.content, COUNT(c.userId) AS currentMember, p.maxMember, p.startDate, p.endDate, p.place
FROM Posts AS p
JOIN Channels AS c
ON p.postId = c.postId
WHERE (p.startDate >= '2021-08-03 15:00:00'
AND startDate < '2021-08-09 15:00:00')
AND (p.title LIKE '%G%'
OR p.content LIKE '%G%'
OR p.postId IN (SELECT DISTINCT postId FROM Tags WHERE tag LIKE '%G%'))
GROUP BY c.postId
HAVING currentMember < maxMember
;
10. LIMIT 추가
SELECT p.postId, p.title, p.postImg, p.content, COUNT(c.userId) AS currentMember, p.maxMember, p.startDate, p.endDate, p.place
FROM Posts AS p
JOIN Channels AS c
ON p.postId = c.postId
WHERE (p.startDate >= '2021-08-03 15:00:00'
AND startDate < '2021-08-09 15:00:00')
AND (p.title LIKE '%G%'
OR p.content LIKE '%G%'
OR p.postId IN (SELECT DISTINCT postId FROM Tags WHERE tag LIKE '%G%'))
GROUP BY c.postId
HAVING currentMember < maxMember
LIMIT 0, 5
;
-- MySQL POINT 형식 테스트
CREATE TABLE pointTest(
pointId int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
point POINT
);
- POINT 형식이 포함된 테이블을 생성
INSERT INTO pointTest (point)
VALUES (ST_GeomFromText('POINT(127.0 37.0)') );
- POINT 타입의 데이터를 삽입하는 방법
SELECT ASTEXT(point) FROM pointTest;
- POINT 타입의 데이터를 조회하는 방법
'항해99 > 필기노트' 카테고리의 다른 글
[필기노트] MySQL Geometry DataSet, Socket Middleware (0) | 2021.08.11 |
---|---|
[필기노트] HTTPS, 테스트코드 고려사항 (0) | 2021.08.10 |
[필기노트] Docker Network (0) | 2021.08.06 |
[필기노트] Docker Volume, SQL (0) | 2021.08.05 |
[필기노트] PROCEDURE, 인증메일 구성방법 (0) | 2021.08.04 |