1st Project_day3_11.16

송철진·2022년 11월 16일
0

1st Project

목록 보기
2/13

TIL

참고
칸과 칸의 구분자: ,
행(row)의 줄바꿈 구분자: \r\n
칸 내의 줄바꿈 구분자 \n
칸 내에 줄바꿈이 있을 경우 ""으로 칸 내의 전체 내용을 감싼다

... ,"HTML과 CSS 익숙해지기\n그리고 친해지기\n마지막으로 짱친 되기", ...

posts.csv

예전에 express 간단한 api구현 과제를 할 때
특정 유저가 작성한 모든 게시글 조회하기 기능(과제#5)가
오늘 구현한 특정 제품이 가진 용량별 이미지 모두 조회하기 기능과 같은 맥락인 거 같다

당시엔

  1. 5개 컬럼의 데이터를 select로 다 불러오고 = 배열
  2. 데이터가 겹치는 컬럼은 배열의 0번째 객체의 키로 접근한 값을 활용
  3. 데이터가 겹치지 않는 컬럼은 배열의 모든 객체에 겹치는 컬럼을 삭제하고 나머지를 반환하는 함수의 생성 및 활용
    ...이었다면

이번엔
GROUP BYGROUP_CONCAT()을 활용해서 구현하기로 했다

  1. 겹치는 컬럼은 products테이블의 id와 content, name_en, name_ko가 있는데 그 중 products.id를 기준으로 그루핑한다
GROUP BY products.id
  1. 겹치지 않는 컬럼은 SELECT GROUP_CONCAT()의 괄호 안에 하나씩 넣는다
SELECT 
	products.id, 
    products.content, 
    ..., 
    GROUP_CONCAT(s.id) as sId
	GROUP_CONCAT(po.image_url), as poImg
    GROUP_CONCAT(s.name), sName
FROM products p
INNER JOIN product_options po ON p.id = po.product_id 
INNER JOIN sizes s ON s.id = po.size_id
GROUP BY p.id
WHERE p.id = 1;
  1. 그러면 mysqld의 결과는 이런 형식으로 될 것이다
idcontent...sIdpoImgsName
1내용불라불라...1,2,3,4url1,url2,url3,url4100ml,50ml,30ml,9*5ml
  1. 근데 아마 프론트엔드에 전달해야하는 형식은 아래와 같을 것이기에 GROUP_CONCAT()된 데이터를 쪼개서 다시 담는 함수를 생성해야할 것 같다..
{ data :
	{
		id : 1,
        content : "내용불라불라",
        ... : ...,
        sizeImages: [
        	{
            	sId : 1,
        		poImg : "url1",
                sName : "100ml"
            },
            {
            	sId : 2,
        		poImg : "url2",
                sName : "50ml"
            },
            {
            	sId : 3,
        		poImg : "url3",
                sName : "30ml"
            },
            {
            	sId : 4,
        		poImg : "url4",
                sName : "9*5ml"
            }
            
        ]
        
	}
}

현상 님이나 상엽 님의 지난 과제를 참고해보면 ARRAYAGE라는 DB함수를 썼는데 그걸 따라해보면 어떨까 싶기도
👉 참고 자료
https://wecode.notion.site/SQL-SQL-Advanced-386ac13ca3034cb1becfa1efe8716606

  1. 명석님의 질문 : DB에서 시간 데이터타입을 TIMESTAMP 대신 DATETIME으로 썼는데 오류가 나는 이유? 참고
DATETIMETIMESTAMP
타입문자형숫자형
용량8btye4byte
데이터 입력값을 직접 입력저장 시 자동 생성

👉 알고보니 다른 에러가 이유였다고 함(잘 기억 안남..)

Blocker, 힘든 점

  1. 커뮤니케이션, 설득할 근거의 부족
  • 어제, 멘토님의 리뷰가 반영된 DB스키마를 바탕으로 초기환경 설정을 완료했다. 그런데 오늘 팀원이 어떤 필터링을 걸든 일정한 형태를 보내므로 프론트엔드가 알아서 찾아서 쓸 수 있는 테이블 구성 방법이 있다며 의견을 냈다.
  • 나는 바꾸지 않는게 맞다고 생각했지만 팀원의 의견대로 하면 왜 안되는 지에 대한 명확한 근거가 부족했다.
  • 찜찜하고 다소 답답했지만 팀원의 의견을 존중하여 한 번 그 방식대로 다시 멘토님께 리뷰 요청을 보내보기로 했다. 팀원이 구상한 DB스키마는 다음과 같다.
  • 누구 의견이 맞고 틀리고를 따지다가 혼자 꿍하기 보다는 상대의 말을 듣고 동의하는 부분이 있다면 그렇게 한 번 해보자~라는 자세가 중요하다.
    그런 자세를 지향해야 한다!
profile
검색하고 기록하며 학습하는 백엔드 개발자

0개의 댓글