[ํ๋ก๊ทธ๋๋จธ์ค] ์กฐํ์๊ฐ ๊ฐ์ฅ ๋ง์ ์ค๊ณ ๊ฑฐ๋ ๊ฒ์ํ์ ์ฒจ๋ถํ์ผ ์กฐํํ๊ธฐ
๐ข ๋ณธ ํฌ์คํ ์ ํ์ฉ๋๋ ๊ธฐ๋ณธ ๋ฌธ์ ๋ฐ ์๋ฃ ์ถ์ฒ๋
ํ๋ก๊ทธ๋๋จธ์ค ์ฝ๋ฉํ ์คํธ ์ฐ์ต,
https://school.programmers.co.kr/learn/challenges?page=1&languages=mysql%2Coracle์์ ๋ฐํ๋๋ค.
· ๋ณธ ๋ฌธ์ https://school.programmers.co.kr/learn/courses/30/lessons/164671
โ ๋ฌธ์
๋ฌธ์ ์ค๋ช
๋ค์์ ์ค๊ณ ๊ฑฐ๋ ๊ฒ์ํ ์ ๋ณด๋ฅผ ๋ด์ USED_GOODS_BOARD ํ ์ด๋ธ๊ณผ ์ค๊ณ ๊ฑฐ๋ ๊ฒ์ํ ์ฒจ๋ถํ์ผ ์ ๋ณด๋ฅผ ๋ด์ USED_GOODS_FILE ํ ์ด๋ธ์ ๋๋ค.
USED_GOODS_BOARD ํ ์ด๋ธ์ ๋ค์๊ณผ ๊ฐ์ผ๋ฉฐ BOARD_ID, WRITER_ID, TITLE, CONTENTS, PRICE, CREATED_DATE, STATUS, VIEWS์ ๊ฒ์๊ธ ID, ์์ฑ์ ID, ๊ฒ์๊ธ ์ ๋ชฉ, ๊ฒ์๊ธ ๋ด์ฉ, ๊ฐ๊ฒฉ, ์์ฑ์ผ, ๊ฑฐ๋์ํ, ์กฐํ์๋ฅผ ์๋ฏธํฉ๋๋ค.
Column name | Type | Nullable |
BOARD_ID | VARCHAR(5) | FALSE |
WRITER_ID | VARCHAR(50) | FALSE |
TITLE | VARCHAR(100) | FALSE |
CONTENTS | VARCHAR(1000) | FALSE |
PRICE | NUMBER | FALSE |
CREATED_DATE | DATE | FALSE |
STATUS | VARCHAR(10) | FALSE |
VIEWS | NUMBER | FALSE |
USED_GOODS_FILE ํ ์ด๋ธ์ ๋ค์๊ณผ ๊ฐ์ผ๋ฉฐ FILE_ID, FILE_EXT, FILE_NAME, BOARD_ID๋ ๊ฐ๊ฐ ํ์ผ ID, ํ์ผ ํ์ฅ์, ํ์ผ ์ด๋ฆ, ๊ฒ์๊ธ ID๋ฅผ ์๋ฏธํฉ๋๋ค.
Column name | Type | Nullable |
FILE_ID | VARCHAR(10) | FALSE |
FILE_EXT | VARCHAR(5) | FALSE |
FILE_NAME | VARCHAR(256) | FALSE |
BOARD_ID | VARCHAR(10) | FALSE |
๋ฌธ์
USED_GOODS_BOARD์ USED_GOODS_FILE ํ ์ด๋ธ์์ ์กฐํ์๊ฐ ๊ฐ์ฅ ๋์ ์ค๊ณ ๊ฑฐ๋ ๊ฒ์๋ฌผ์ ๋ํ ์ฒจ๋ถํ์ผ ๊ฒฝ๋ก๋ฅผ ์กฐํํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ์ฒจ๋ถํ์ผ ๊ฒฝ๋ก๋ FILE ID๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌํด์ฃผ์ธ์. ๊ธฐ๋ณธ์ ์ธ ํ์ผ๊ฒฝ๋ก๋ /home/grep/src/ ์ด๋ฉฐ, ๊ฒ์๊ธ ID๋ฅผ ๊ธฐ์ค์ผ๋ก ๋๋ ํ ๋ฆฌ๊ฐ ๊ตฌ๋ถ๋๊ณ , ํ์ผ์ด๋ฆ์ ํ์ผ ID, ํ์ผ ์ด๋ฆ, ํ์ผ ํ์ฅ์๋ก ๊ตฌ์ฑ๋๋๋ก ์ถ๋ ฅํด์ฃผ์ธ์.
์กฐํ์๊ฐ ๊ฐ์ฅ ๋์ ๊ฒ์๋ฌผ์ ํ๋๋ง ์กด์ฌํฉ๋๋ค.
โ ํ์ด
๋ฌธ์ ์๊ตฌ์ฌํญ
์กฐํ์๊ฐ ๊ฐ์ฅ ๋์ ์ค๊ณ ๊ฑฐ๋ ๊ฒ์๋ฌผ์ ๋ํ < VIEWS ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํ์ ๋ 1๋ฑ ๊ฒ์๋ฌผ
์ฒจ๋ถํ์ผ ๊ฒฝ๋ก๋ฅผ ์กฐํํ๋ SQL๋ฌธ์ ์์ฑ
> ๊ฒ์๊ธ ์ ๋ณด์ ๊ฒ์๊ธ ์ฒจ๋ถํ์ผ์ ๋ํ ํ ์ด๋ธ join์ left join์ผ๋ก ๊ณตํต ์ปฌ๋ผ BOARD_ID๋ฅผ ์ฌ์ฉ.
์ฒจ๋ถํ์ผ ๊ฒฝ๋ก๋ FILE ID๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ < ์ ๋ ฌ์กฐ๊ฑด1
โ ํ์ผ๊ฒฝ๋ก ์์ฑ๋ฒ :
๊ธฐ๋ณธ์ ์ธ ํ์ผ๊ฒฝ๋ก๋ /home/grep/src/ ์ด๋ฉฐ
๊ฒ์๊ธ ID๋ฅผ ๊ธฐ์ค์ผ๋ก ๋๋ ํ ๋ฆฌ๊ฐ ๊ตฌ๋ถ๋๊ณ , ํ์ผ์ด๋ฆ์ ํ์ผ ID, ํ์ผ ์ด๋ฆ, ํ์ผ ํ์ฅ์๋ก ๊ตฌ์ฑ๋๋๋ก ์ถ๋ ฅ
> ๋ฌธ์์ด ํฉ์น๊ธฐ๊ฐ ํ์ํ๋ค. ๋ฌธ์์ด์ CONCAT(๋ฌธ์์ด1, ๋ฌธ์์ด2, ๋ฌธ์์ด3, ...) ์ผ๋ก ํฉ์น ์ ์๋ค.
SELECT CONCAT('/home/grep/src/' , UGF.BOARD_ID , '/' ,
UGF.FILE_ID , UGF.FILE_NAME, UGF.FILE_EXT) AS FILE_PATH
FROM USED_GOODS_FILE UGF
LEFT JOIN USED_GOODS_BOARD UGB
ON UGB.BOARD_ID = UGF.BOARD_ID
WHERE UGB.BOARD_ID = (SELECT BOARD_ID
FROM USED_GOODS_BOARD
ORDER BY VIEWS DESC
LIMIT 1)
ORDER BY UGF.FILE_ID DESC
'์กฐํ์๊ฐ ๊ฐ์ฅ ๋์' ๊ฒ์๊ธ์ ์ฐพ๋ ๊ฒ์
¹์์ฒ๋ผ ์กฐํ์๊ฐ ๊ฐ์ฅ ๋์ ๊ฒ์๊ธ์ BOARD_ID๋ฅผ WHERE์กฐ๊ฑด์ผ๋ก ์ฃผ๊ฑฐ๋
²์กฐํ์ ์ต๋๊ฐ์ WHERE์ ์กฐํ์ ๊ฒ์ ์กฐ๊ฑด์ผ๋ก ์ค ์ ์๋ค.
๋จ, 2๋ฒ ๋ฐฉ๋ฒ์ ๋ฌธ์ ์ ์กฐํ์๊ฐ ๊ฐ์ฅ ๋์ ๊ฒ์๋ฌผ์ ํ๋๋ง ์กด์ฌํ๋ค. ๋ ์กฐ๊ฑด์ด ์๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฅํ๋ค.