-
[Node.js & MySQL] LEFT JOIN으로 가져온 데이터 출력생활코딩/WEBn 2020. 12. 9. 21:32
LEFT JOIN
SELECT * FROM table1 LEFT JOIN table2 ON table1.key=table2.key
테이블에 같은 이름의 컬럼이 있는 경우, 테이블.컬럼 형태로 표시해주어야 ambiguity error가 나지 않는다.
SELECT topic.id, title, author.name, author.description FROM topic LEFT JOIN author ON topic.author_id=author.id; +----+-----------+--------+-------------+ | id | title | name | description | +----+-----------+--------+-------------+ | 0 | Home | banana | fruit | | 1 | Google | banana | fruit | | 2 | Apple | banana | fruit | | 7 | Amazon | banana | fruit | | 5 | Microsoft | NULL | NULL | | 6 | Facebook | NULL | NULL | +----+-----------+--------+-------------+ 6 rows in set (0.00 sec)
Node.js에서 MySQL 쿼리문으로 데이터 가져오기
위 데이터를 Node.js 쿼리문으로 가져오면 이렇다.
/* var db = mysql.createConnection({ host : 'localhost', user : 'nodejs', password : 'password', database : 'data' }); db.connect(); 여기까지 MySQL 연동을 위한 객체 설정 */ db.query('SELECT topic.id, title, author.name, author.description FROM topic LEFT JOIN author ON topic.author_id=author.id', function(err, result){ callback() };
result에 RowDataPacket이라는 Object 형태로 가져와진다.
console.log(result); // 위에서 찍어보면 [ RowDataPacket { id: 0, title: 'Home', name: 'banana', description: 'fruit' }, RowDataPacket { id: 1, title: 'Google', name: 'banana', description: 'fruit' }, RowDataPacket { id: 2, title: 'Apple', name: 'banana', description: 'fruit' }, RowDataPacket { id: 7, title: 'Amazon', name: 'banana', description: 'fruit' }, RowDataPacket { id: 5, title: 'Microsoft', name: null, description: null }, RowDataPacket { id: 6, title: 'Facebook', name: null, description: null } ]
WHERE topic.id = 5 등으로 옵션을 주면 특정 행의 데이터만도 가져올 수 있다.
이제 READ 작업시 필요한 부분에 넣어주면 된다.
db.query('SELECT * FROM topic LEFT JOIN author ON topic.author_id = author.id WHERE topic.id = ', [topicId], function(err, result2){ // 구분자가 파일명에서 id로 바뀌면서 title -> topicId var template = templates.get(topicId, result2[0], dataList); // 결과가 result2가 array라서 [0]처럼 인덱싱 필요 response.writeHead(200); // 리스폰스쪽은 mysql 쿼리문 전송 이후 살행되는 response.end(template); // callback 함수 안쪽으로 들어갔다 });
'생활코딩 > WEBn' 카테고리의 다른 글
[Node.js & MySQL] main.js 정리 - DB접속 정보/쿼리 분리 (0) 2021.01.12 [Node.js & MySQL] 목록 콤보박스 생성 / 디폴트값 설정 (2) 2021.01.05 [Node.js & MySQL] 데이터 처리방식: 파일 -> MySQL 이식 (0) 2020.12.09 [Node.js & MySQL] Intro, 환경설정 (0) 2020.11.03 [OAuth2.0] OAuth2.0 개요 (0) 2020.09.30