프로젝트 내용
사이트 리뉴얼
로그인 = jwt 활용
카카오 로그인
네이버 로그인
구글 로그인
게시판 기능
DB
채팅 (1:관리자)
관리자페이지
팝업관리
* DB에 내용 넣어서 뿌려주기 (sub 페이지를 하나하나html 으로 하기보단)
반응형 (모바일)
발표 : 어떤 기능을 어떻게 넣었고
작업하는 순서
내가 만드려는 사이트의 페이지가 몇개가 있는지 확인 (페이지 개수)
- url port 값들이 얼마나 있는지
디자인 레이아웃 (페이지마다 공통의 레이아웃 부터 )
DB설계
상품등록한 DB 상품 리스트들을 쭉 뿌리기 (게시판과 똑같음)
어제 코드 수정
DB - table 3개 만들어보기
데이터 베이스 class mysql 에 만들기
$create database class
<- 요기 들어가서
왼쪽 class로 적고 오른쪽 암호 적고 / 열기 클릭
쿼리 클릭
아래 table 생성 후 실행
mysql 창보다 위의 장점 - 썼던 코드를 이어서 수정할 수 있는 점
mysql text 수정 불편
첫 번째 테이블 curriculum 만들기
CREATE TABLE curriculum(
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
subject VARCHAR(100) NOT NULL,
start_date DATE NOT NULL,
end_date DATE NOT NULL,
content TEXT
)CHARACTER SET UTF8 COLLATE utf8_general_ci
이걸 쓰고 주석처리할 수 있어서 좋음
mysql
DATE FORMAT
NOW()
select + 함수명 을 치면
select NOW()
select DATE_FORMAT('2021-06-03', '%y%m%d')
%y -> 두 자리 연도 02
%Y -> 네 자리 연도 2002
%m -> 06
%M -> June / 영어로 나옴
%d -> 03
%D -> Third / 영어로 나옴
STR_TO_DATE()는 빨간색으로 나온다
STR_TO_DATE() -> DATE
DATE_FORMAT -> STRING
(varchar 써서 그냥 string으로 쓸 때 )
삭제하고 다시 만들기
INSERT INTO curriculum(
subject, start_date, end_date,content
) VALUES (
'blockChain',
STR_TO_DATE('2021-06-03', '%Y-%m-%d'),
STR_TO_DATE('2021-06-21', '%Y-%m-%d'),
'블록체인 내용입니다'
)
3개 만들기
7월달만 가져오기
SELECT * FROM curriculum WHERE DATE_FORMAT(start_date,'%m') = '07';
시작 날짜를 언제부터 ~ 언제까지 가져오기 between and
SELECT * FROM curriculum WHERE start_date BETWEEN '2021-06-01' AND '2021-06-30'
SELECT MONTH(start_date) FROM curriculum;
SELECT YEAR(start_date) FROM curriculum;
SELECT month(start_date) FROM curriculum;
SELECT day(start_date) FROM curriculum;
UNION ALL - table & table 연결할 때
(selecet * from curriculum) UNION ALL (select * from curriculum)
select -> 조회하는 기능 / 새로운 테이블도 보여줄 수 있음. (as)
SELECT end_date AS 'date' FROM curriculum
UNION ALL
SELECT start_date AS 'date' FROM curriculum;
필드명 'date' 라고 curriculum 의 end_date를 가져오기
field 가 없는 data 만들어서 조회하기
select 1;
이게 된다,, 저 1은 data값 field 값이 없을 때 data 값이 field 값이 된다.
테이블 2개 더 만들기
CREATE TABLE skill_item(
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(50) NOT NULL,
TYPE VARCHAR(50) NOT NULL
)CHARACTER SET UTF8 COLLATE UTF8_GENERAL_CI;
CREATE TABLE skill(
curr_id INT NOT NULL,
item_id INT NOT NULL
)CHARACTER SET UTF8 COLLATE UTF8_GENERAL_CI;
계속 오류난 이유 :
1. ; 세미콜론안붙임
2. 마지막내용에 , 콤마 붙임
3. NOT_NULL 이라고 씀
curriculum 강의 리스트
skill_item 배우는 과목 리스트
skill_item table data 넣기
INSERT INTO skill_item (NAME, TYPE) VALUES ('html', 'front-end');
INSERT INTO skill_item (NAME, TYPE) VALUES ('CSS', 'front-end');
INSERT INTO skill_item (NAME, TYPE) VALUES ('JavaScript', 'front-end');
INSERT INTO skill_item (NAME, TYPE) VALUES ('NodeJS', 'back-end');
INSERT INTO skill_item (NAME, TYPE) VALUES ('MariaDB', 'back-end');
추가
INSERT INTO skill_item (NAME, TYPE) VALUES ('C++', 'Programming');
INSERT INTO skill_item (NAME, TYPE) VALUES ('Unity', 'Programming');
블록체인이 id = 2 번
SELECT * FROM skill WHERE curr_id=2;
위의 명령을 괄호로 감싸서 하나의 table로 만들기 (select는 테이블을 만들어서 보여주는것! )
SELECT * FROM (SELECT * FROM skill WHERE curr_id=2) AS A
- AS A = A 라는 filed로 나타내줘
SELECT A.item_id FROM (SELECT * FROM skill WHERE curr_id=2) AS A
SELECT * FROM (SELECT * FROM skill WHERE curr_id=2) AS A
LEFT JOIN skill_item AS B
-> 오류 / 조건이 항상 붙음 : item id 와 id 값만 같은 것만 출력시키겠다.
SELECT * FROM (SELECT * FROM skill WHERE curr_id=2) AS A
LEFT JOIN skill_item AS B
ON A.item_id=B.id;
A테이블 기준 나오고 B테이블이 옆으로 붙음 - 현재 모든 fileds를 보여주고 있음
만약 name과 type만 나타내고 싶으면
SELECT B.name,B.type FROM (SELECT * FROM skill WHERE curr_id=2) AS A
LEFT JOIN skill_item AS B
ON A.item_id=B.id;
해시태그도 태그 생길때마다 db입력하면 db소모 -> 위처럼 해주면 좋다
위의 명령문은 rows 수가 다르다 / 그래서 on 이라는 조건문을 꼭 써야함
id / item_id 값 같은 것 가져오기
foreign key
굳이 안해도 쿼리문 작성은 된다.
근데 falling key의 기능이 좋다
id를 삭제할 때 item_id 의 값도 같이 삭제할 수 있다.
만드는 시기 테이블생성할 때 or 생성 후 선언
스킬이 중개자 역할
스킬의 curr_id를 커리큘럼의 id와 연결하겠다~둘을 연결하는 변수명이 skillcurrid 이다
여기서 새로고침 해서 skill 클릭 -> 외래키 누르면 -> 만든 외래키가 나옴
restrict - 기능자체르 ㄹ막아버림 / 잘못하게되면 삭제 안되도록 (?)
cascade - 나랑 연관된 아이들 다 삭제 (부모 테이블 삭제되면 나도 삭제될게)
이제 스킬아이템에다가 foreign key