본문 바로가기

개인공부 기록/node.js

[Node.js][SQL] SQL 테이블의 값을 쿼리문을 사용하여 Object 형태로 뽑아내기

SQL 테이블 내부에 1:N 관계인 데이터를 JSON 형태로 출력하는법.

먼저 for문을 사용해도 Object 형태로 추출이 가능하다. PR 피드백으로 for문 말고 쿼리문으로 해결이 가능해보인다며.. 멘토님이 참고하라며 주신 MsSQL 링크...(아니 우린 MySQL 인데,,)  적용 불가능한건데 그걸 제대로 안 살피고 안된다고 넋놓고 있었다..

 

하여튼 내가 원하는 결과 값의 형태는 1명의 유저가 여러 게시글을 작성한 경우 유저 id, name은 1번만 출력되고 게시글 정보 posting에 묶여서 출력되게 하는게 목표였다.

결과값

일단 MsSQL의 JSON PATH, AUTO 이런건 MySQL에 절대 적용이 안되니 혹시 저처럼 제대로 안살피고 무작정 따라 치시는 분이 있으시면 당장 멈추시길..ㅠㅠ

 

테이블의 기본정보는 다음과 같이 posts, users 두가지로 설정하였다.

DB TABLE

서브쿼리를 사용하긴 했는데 JSON_ARRAYAGG 와 JSON_OBJECT를 사용해서 posting 데이터를 Object 형태로 가져왔다.

post 컬럼에 게시글에대한 정보가 Object 형태로 들어갔다.

 

이걸 이대로 res로 보내면

post가Key, Value 형태고  pots의 Value가 String 형태로 출력된다. 그래서 post의 post만 다른 변수에 저장하여 JSON.parse()를 이용하여 Object 형태로 바꿔주고, Key, Value를 입력해서 원하는 형태로 결과값을 반환해주는 방법을 선택하였다.

 

코드도 첨부하였다.

app.get('/posts/:id', async (req, res) => {
  const { id } = req.params;

  await myDataSource.query(
    `
    SELECT users.id as id, users.no as no, 
    ((SELECT JSON_ARRAYAGG(
    JSON_OBJECT('no', no, 'title', title, 'post', post )) 
    FROM posts WHERE posts.user_id=${ id })) 
    AS post FROM users 
    WHERE users.no=${ id }
    
    `, (err, rows) => { 
      let post = rows[0].post
      let postObj = JSON.parse(post)
      res.status(200).json( { user_name : rows[0].id, user_no : rows[0].no , posting : postObj} )
    }     
    )
    
});

 

 

참고자료

1. SQL 테이블에서 Object 형태로 값 뽑아내기

 

How to convert result table to JSON array in MySQL

I'd like to convert result table to JSON array in MySQL using preferably only plain MySQL commands. For example with query SELECT name, phone FROM person; | name | phone | | Jack | 12345 | | John |

stackoverflow.com

2. String을 Object 형태로 변환하기

 

[Javascript] JSON String <-> Object 객체 문자열 변환

[Javascript] JSON String Object 객체 문자열 변환  - 피곤하다 변환하고 싶은게 생겼다 1. 무엇을 변환하고 싶었는가  - JSON 문자열을 객체로 (JSON String to Object)  - JSON 객체를 문자열로 (JSON Objec..

6developer.com

 

Recent Posts
Popular Posts
Recent Comments