시퀄라이즈 메서드관련 질문
492
작성한 질문수 47
안녕하세요. 제로초님 강의 잘듣고있습니다.
강의를 응용하면서 좋아요 순으로 게시글을 가져오는 라우터를 만들고 있습니다.
sequelize.literal을 사용해서 여러 시도를 해봤지만 동일하게 컬럼을 알 수 없다고 오류가 발생합니다.
order: [[sequelize.literal('COUNT(Likers.id)'), 'DESC']],![posts.js - prepare - Visual Studio Code [Administrator] 2022-09-30 오후 11_52_48 (2).png posts.js - prepare - Visual Studio Code [Administrator] 2022-09-30 오후 11_52_48 (2).png](https://cdn.inflearn.com/public/files/posts/62ebc41b-35a9-4746-a7a5-a97504782fe9/posts.js - prepare - Visual Studio Code [Administrator] 2022-09-30 오후 11_52_48 (2).png)
order: [[Sequelize.literal("(COUNT(`likers->like`.`PostId`))"), "DESC"]],![posts.js - prepare - Visual Studio Code [Administrator] 2022-09-30 오후 11_51_13 (2).png posts.js - prepare - Visual Studio Code [Administrator] 2022-09-30 오후 11_51_13 (2).png](https://cdn.inflearn.com/public/files/posts/4e8fd108-60c0-4053-b5f1-c0c92f4f27fd/posts.js - prepare - Visual Studio Code [Administrator] 2022-09-30 오후 11_51_13 (2).png)
DB는 처음 접해봐서 구글링, 공식문서를 참고해도 도저히 해결하기 힘들어서 질문드리겠습니다.
참고자료도 함께 첨부하겠습니다.
const express = require('express');
const { Sequelize, Op } = require('sequelize');
const { Post, User, Image, Comment } = require('../models');
const router = express.Router();
router.get('/top', async (req, res, next) => { // loadTopPostsAPI / GET /posts/top
try {
const posts = await Post.findAll({
limit: 20,
offset: 0,
// Likers의 갯수로 정렬하려면 조건은 어떻게 해야하나요?
order: [[Sequelize.literal("(COUNT(`likers->like`.`PostId`))"), "DESC"]],
include: [{
model: User,
attributes: ['id', 'nickname'],
}, {
model: Image,
}, {
model: Comment,
include: [{
model: User,
attributes: ['id', 'nickname'],
}],
}, {
model: User,
as: 'Likers',
attributes: ['id'],
}],
})
res.status(200).json(posts);
} catch (error) {
console.error(error);
next(error);
}
});.png)
답변 1
0
SQL에서는 테이블 이름이 likers가 아닐 겁니다. 전체 sql을 봐야 테이블 이름을 알수있을 것 같네요.
0
답변 감사합니다.
DB는 처음다뤄봐서 말씀해주신 조언을 듣고 다시 시퀄라이즈코드를 작성해봐도 원하는 결과를 얻기 힘드네요
SQL의 전체 테이블을 첨부하겠습니다. 이러한 테이블구조에서는 어떻게 시퀄라이즈 코드를 작성해야될까요?
.png)
0
말씀하신 SQL문이 MYSQL에서 작성한 쿼리를 말씀해주시는걸까여?
아니면 시퀄라이즈의 코드를 말씀해주시는걸까요?
제가 SQL문은 사용방법을 아직 몰라서 강의에서 설명하신 시퀄라이즈 코드로만 작성하고 있습니다.
0
올리신 첫 두 이미지를 보시면 sql문이 있잖아요. 그걸 자르지말고 올리시면 됩니다. 이래서 에러메시지를 잘라서 올리시면 안 됩니다. 안 그랬으면 한방에 해결해드렸을테니까요
0
죄송합니다. 앞으로 유의하겠습니다
말씀해주신 SQL문 함께 첨부하겠습니다.
그리고 게시글의 좋아요순으로 정렬을 한 뒤
추가로 좋아요가 0개인 게시글은 가져오지 않는다는 WHERE절을 추가하고 싶은데 이또한 시퀄라이즈에서 어떻게 설정하는지 알 수 있을까요?
// 설정 시 아래와 같은 오류가 발생했습니다.
order: [[Sequelize.literal('COUNT(Likers.id)'), 'DESC']],
0
조인된 로우 개수를 세는 것은 조금 난이도가 있습니다. 이런 식으로 distinct 문을 사용하셔야 하는데 제 생각엔 우ㅏ크벤치에서 한 번 먼저 연습을 해보고 하셔야 할 것 같습니다.
https://stackoverflow.com/questions/20119901/counting-number-of-joined-rows-in-left-join
제가 강의에서는 시간 상의 이유로 sql을 생략하고 알려드렸는데 복잡한 기능을 구현하려면 결국 sql을 따로 학습하셔야 합니다.
0
답변 정말 감사합니다
백틱을 사용해서 수정했는데도 동일하게 'Likers.id'컬럼을 알 수 없다고 오류가 발생하네요
조언해주신대로 시퀄라이즈랑 sql을 좀 더 공부해서 문제를 해결해봐야겠네요
감사합니다!!
0
근데 이게 공식문서, 구글링으로 답을 찾았습니다.
어떠한 자료를 봐도 동일한 답변인데 제가 작성하면 계속 같은 오류가 발생하네요.
백틱이나 따옴표 뭔가 한부분에서 사소한 오타가 나고있는건지, 도저히 문제를 찾기가 힘드네요 ㅜㅜ
혹시 이 문제에 대해서 피드백좀 부탁드려도 될까요?
제가 참고했던 자료이고, 다른곳에서도 동일한 답변을 확인했습니다.
https://github.com/sequelize/sequelize/issues/7634
제가 마지막으로 시도했던 코드와 오류입니다
const express = require('express');
const { Sequelize, Op } = require('sequelize');
const { Post, User, Image, Comment } = require('../models');
const router = express.Router();
router.get('/top', async (req, res, next) => { // loadTopPostsAPI / GET /posts/top
try {
const posts = await Post.findAll({
limit: 20,
offset: 0,
order: [[Sequelize.literal("(COUNT(`likers->like`.`PostId`))"), "DESC"]],
include: [{
model: User,
attributes: ['id', 'nickname'],
}, {
model: Image,
}, {
model: Comment,
include: [{
model: User,
attributes: ['id', 'nickname'],
}],
}, {
model: User,
as: 'Likers',
attributes: ['id'],
}],
})
res.status(200).json(posts);
} catch (error) {
console.error(error);
next(error);
}
});

0
답변 감사합니다
네네 대문자로 해도 동일하게
sqlMessage: "Unknown column 'Likers->Like.PostId' in 'order clause'",만 발생되고있습니다.
사소한 오타문제일것같아서 소문자, 대문자, 백틱, 작은 큰 따옴표 전부 다 해봤는데도 동일하게 저 에러만 발생하네요
0
괜찮습니다!! 늦은 시간에 계속 질문드려서 오히려 제가 죄송합니다
혹시 오늘 이후라도 시간 괜찮으실때 말씀해주신 분석결과를 알 수 있을까요?
저도 그전까지 다른 해결방법이 있는지 계속 찾아볼 예정입니다.
0
아.. 미처 그 부분은 생각하지 못했네요
말씀하신 텍스트 첨부하도록 하겠습니다. 감사합니다.
code: 'ER_BAD_FIELD_ERROR',
errno: 1054,
sqlState: '42S22',
sqlMessage: "Unknown column 'Likers->Like.PostId' in 'order clause'",
sql: 'SELECT Post.*, User.`id` AS User.id, User.`nickname` AS User.nickname, Images.`id` AS Images.id, Images.`src` AS Images.src, Images.`createdAt` AS Images.createdAt, Images.`updatedAt` AS Images.updatedAt, Images.`PostId` AS Images.PostId, Comments.`id` AS Comments.id, Comments.`content` AS Comments.content, Comments.`createdAt` AS Comments.createdAt, Comments.`updatedAt` AS Comments.updatedAt, Comments.`UserId` AS Comments.UserId, Comments.`PostId` AS Comments.PostId, Comments->User.`id` AS Comments.User.id, Comments->User.`nickname` AS Comments.User.nickname, Likers.`id` AS Likers.id, Likers->Like.`createdAt` AS Likers.Like.createdAt, Likers->Like.`updatedAt` AS Likers.Like.updatedAt, Likers->Like.`PostId` AS Likers.Like.PostId, Likers->Like.`UserId` AS Likers.Like.UserId FROM (SELECT Post.`id`, Post.`title`, Post.`desc`, Post.`ingredient`, Post.`recipes`, Post.`tips`, Post.`tags`, Post.`createdAt`, Post.`updatedAt`, Post.`UserId` FROM posts AS Post ORDER BY (COUNT(`Likers->Like`.`PostId`)) DESC LIMIT 0, 20) AS Post LEFT OUTER JOIN users AS User ON Post.`UserId` = User.`id` LEFT OUTER JOIN images AS Images ON Post.`id` = Images.`PostId` LEFT OUTER JOIN comments AS Comments ON Post.`id` = Comments.`PostId` LEFT OUTER JOIN users AS Comments->User ON Comments.`UserId` = Comments->User.`id` LEFT OUTER JOIN ( Like AS Likers->Like INNER JOIN users AS Likers ON Likers.`id` = Likers->Like.`UserId`) ON Post.`id` = Likers->Like.`PostId` ORDER BY (COUNT(`Likers->Like`.`PostId`)) DESC;',
parameters: undefined
},
0
보니까 구문이 조금 이상한 게 ORDER BY를 할 수 없는 곳에서 ORDER BY를 하고 있네요.
시퀄라이즈가 이상하게 짜주는 것이라 어떻게 수정해야할지 애매하네요 ㅠㅠ
0
그렇군요 저도 몇일동안 해결해보려고 노력해봤는데 안되겠네요..ㅜㅜ
시퀄라이즈랑, SQL을 더 공부해서 추후에라도 문제를 해결해봐야겠네요
답변해주신것들 전부 감사했습니다!!
넥스트 버젼 질문
0
90
2
로그인시 401 Unauthorized 오류가 뜹니다
0
104
1
무한 스크롤 중 스크롤 튐 현상
0
198
1
특정 페이지 접근을 막고 싶을 때
0
117
2
createGlobalStyle의 위치와 영향범위
0
103
2
인라인 스타일 리렌더링 관련
0
98
2
vsc 에서 npm init 설치시 오류
0
159
2
nextjs 15버전 사용 가능할까요?
0
166
1
화면 새로고침 문의
0
129
1
RTK에서 draft, state 차이가 있나요?
0
164
2
Next 14 사용해도 될까요?
0
455
1
next, node 버전 / 폴더 구조 질문 드립니다.
0
359
1
url 오류 질문있습니다
0
218
1
ssh xxxxx로 우분투에 들어가려니까 port 22: Connection timed out
0
391
1
sudo certbot --nginx 에러
0
1295
2
Minified React error 콘솔에러 (hydrate)
0
481
1
카카오 공유했을 때 이전에 작성했던 글이 나오는 버그
0
257
1
프론트서버 배포 후 EADDRINUSE에러 발생
0
341
1
npm run build 에러
0
526
1
front 서버 npm run build 중에 발생한 에러들
0
399
1
서버 실행하고 브라우저로 들어갔을때 404에러
0
351
2
css 서버사이드 랜더링이 적용되지 않아서 문의 드립니다.
0
291
1
팔로워 3명씩 불러오고 데이터 합쳐주는걸로 바꾸고 서버요청을 무한으로하고있습니다.
0
251
2
해시태그 검색에서 throttle에 관해 질문있습니다.
0
207
1





