DB module 문제

희주·2022년 9월 28일
0
post-thumbnail

📝문제

girl_group, song table에 대한 db-module, db-test 만들어서 본인이름.zip으로 제출

🔵 Table

~맞지 않는 내용도 포함되어 있음~

  • Girl_group

  • Song

0. 작성 전 준비

const mysql = require('mysql');
const config = require('../mysql.json');

module.exports = {
    getConnection : function() {
        const conn = mysql.createConnection(config);
        conn.connect(err => {
            if (err) {
                console.log('mysql connetion error');
                console.log(err);
            }
        });
        return conn;
    },

1. 걸그룹 리스트 조회 (gid, 걸그룹 이름, 데뷔일, 히트곡명)

    girlGroupList: function(callback) {
        const conn = this.getConnection(); 
        const sql = `SELECT g.gid, g.name, DATE_FORMAT(g.debut, '%Y-%m-%d') AS debutDate, s.title 
        FROM girl_group AS g
        JOIN song AS s
        ON g.hit_song_id=s.sid;`;
        conn.query(sql, (err, rows, fields) => {
            if (err)
                throw err;
            callback(rows);
        });
        conn.end();
    },
  • getConnection인 이유 : 위에서 createConnection을 했기 때문에
  • DATE_FORMAT : debut로 뽑으면 원하는 양식으로 나오지 않기 때문에 양식을 지정해줌

2. 송 리스트 조회 (sid, 노래제목, 가사, 걸그룹명)

    songList: function(callback) {
        const conn = this.getConnection();  
        const sql = `SELECT s.sid, s.title, s.lyrics, g.name 
        FROM girl_group AS g
        JOIN song AS s
        ON g.hit_song_id=s.sid;`;
        conn.query(sql, (err, rows, fields) => {
            if (err)
                throw err;
            callback(rows);
        });
        conn.end();
    },

3. 걸그룹 검색(gid로) (gid, 걸그룹 이름, 데뷔일, 히트곡명)

    getGirlGroup: function(params, callback) {
        const conn = this.getConnection();
        const sql = `SELECT g.gid, g.name, DATE_FORMAT(g.debut, '%Y-%m-%d') AS debutDate, s.title
        FROM girl_group AS g
        JOIN song AS s
        ON g.hit_song_id=s.sid
        WHERE g.gid=?;`;
        conn.query(sql,params, (err, rows, fields) => {
            if (err)
                throw err;
            callback(rows);
        });
        conn.end();
    },

4. 송 검색(sid로) (sid, 노래제목, 가사, 걸그룹명)

    getSong: function(params, callback) {
        const conn = this.getConnection();
        const sql = `SELECT s.sid, s.title, s.lyrics, g.name
        FROM girl_group AS g
        JOIN song AS s
        ON g.hit_song_id=s.sid
        WHERE s.sid=?;`;
        conn.query(sql,params, (err, rows, fields) => {
            if (err)
                throw err;
            callback(rows);
        });
        conn.end();
    },

5. 걸그룹 추가

    getAllGirlGroup: function(callback) {
        const conn = this.getConnection();
        const sql = `SELECT gid, name, DATE_FORMAT(debut, '%Y-%m-%d') AS debutDate, hit_song_id 
        FROM girl_group;`;
        conn.query(sql, (err, rows, fields) => {
            if (err)
                throw err;
            callback(rows);
        });
        conn.end();
    },
  • 추가 전 전체 걸그룹 리스트 table을 먼저 만든다.
    => 위 문제에서 song table과 join한 table만 있고 girl_group table이 없기 때문
    insertGirlGroup: function(params, callback) {
        const conn = this.getConnection();
        const sql = `INSERT INTO girl_group
        (gid, name, debut, hit_song_id)
        VALUES (?, ?, ?, ?);`;
        conn.query(sql, params, (err, fields) => {
            if (err)
                throw err;
            callback();
        });
        conn.end();
    },
  • gid는 primary key라서 비워도 알아서 변경됨 (꼭 하나이기 때문에)
  • test 해볼 때는 module에 작성한 value값대로 작성해야 적용됨

6. 걸그룹 수정

    updateGirlGroup: function(params, callback) {
        const conn = this.getConnection();
        const sql = `UPDATE girl_group 	
        SET NAME=?, debut=?, hit_song_id=?
        WHERE gid=?;`;
        conn.query(sql, params, (err, fields) => {
            if (err)
                throw err;
            callback();
        });
        conn.end();
    },

7. 걸그룹 삭제

    deleteGirlGroup: function(params, callback) {
        const conn = this.getConnection();
        const sql = `DELETE FROM girl_group 
        WHERE gid=?`;
        conn.query(sql, params, (err, fields) => {
            if (err)
                throw err;
            callback();
        });
        conn.end();
    },

8. 송 추가

    getAllSong: function(callback) {
        const conn = this.getConnection();
        const sql = `SELECT sid, title, lyrics 
        FROM song;`;
        conn.query(sql, (err, rows, fields) => {
            if (err)
                throw err;
            callback(rows);
        });
        conn.end();
    },
  • 걸그룹과 동일하게 먼저 전체 곡 리스트를 조회
    insertSong: function(params, callback) {
        const conn = this.getConnection();
        const sql = `INSERT INTO song
        (sid, title, lyrics)
        VALUES (?, ?, ?);`;
        conn.query(sql, params, (err, fields) => {
            if (err)
                throw err;
            callback();
        });
        conn.end();
    },

9. 송 수정

    updateSong: function(params, callback) {
        const conn = this.getConnection();
        const sql = `UPDATE song 	
        SET title=?, lyrics=?
        WHERE sid=?;`;
        conn.query(sql, params, (err, fields) => {
            if (err)
                throw err;
            callback();
        });
        conn.end();
    },

10. 송 삭제

    deleteSong: function(params, callback) {
        const conn = this.getConnection();
        const sql = `DELETE FROM song 
        WHERE sid=?`;
        conn.query(sql, params, (err, fields) => {
            if (err)
                throw err;
            callback();
        });
        conn.end();
    },

🖥️ 2022.09.27 제출 과제

0개의 댓글