[๐ฅ๋ฏธ์ - SQL๋ฌธ ๋ถ์]
SELECT m.content, m.point, s.name, mm.status //๋ฏธ์
๋ด์ฉ, ๋ฏธ์
ํฌ์ธํธ, ๊ฐ๊ฒ ์ด๋ฆ, ๋ฏธ์
์ํ
FROM mission AS m
JOIN member_mission AS mm ON m.id = mm.mission_id
JOIN store AS s ON m.store_id = s.id
WHERE mm.member_id = ? //member์ id๊ฐ์ ๋ฐ์ธ๋ฉ ๋ณ์๋ก ์ฒ๋ฆฌ
AND mm.status = 'COMPLETED' //'์งํ์๋ฃ' ์ํ
AND mm.id < ? //cursor ๊ฐ์ ๋ฐ์ธ๋ฉ ๋ณ์๋ก ์ฒ๋ฆฌ
ORDER BY mm.updated_at DESC //๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ
LIMIT 3;
SELECT m.content, m.point, s.name, mm.status //๋ฏธ์
๋ด์ฉ, ๋ฏธ์
ํฌ์ธํธ, ๊ฐ๊ฒ ์ด๋ฆ, ๋ฏธ์
์ํ
FROM mission AS m
JOIN member_mission AS mm ON m.id = mm.mission_id
JOIN store AS s ON m.store_id = s.id
WHERE mm.member_id = ? //member์ id๊ฐ์ ๋ฐ์ธ๋ฉ ๋ณ์๋ก ์ฒ๋ฆฌ
AND mm.status = 'IN_PROGRESS' //'์งํ์ค' ์ํ
AND mm.id < ? //cursor ๊ฐ์ ๋ฐ์ธ๋ฉ ๋ณ์๋ก ์ฒ๋ฆฌ
ORDER BY mm.updated_at DESC //๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ ์ฒ๋ฆฌ
LIMIT 3;
โ ๋ด๊ฐ ์งํ์ค, ์งํ ์๋ฃํ ๋ฏธ์ ๋ชจ์์ ๋ณด๋ ์ฟผ๋ฆฌ(ํ์ด์ง ํฌํจ)
[sql ์ฟผ๋ฆฌ๋ฌธ ๋ถ์]
โช๏ธ SELECT: ๋ฏธ์ ๋ด์ฉ, ๋ฏธ์ ํฌ์ธํธ, ๊ฐ๊ฒ ์ด๋ฆ, ๋ฏธ์ ์ํ๋ฅผ ํฌํจํ ๋ฏธ์ ์ ์กฐํ
โช๏ธ JOIN: mission, member_mission, store ํ ์ด๋ธ์ ์กฐ์ธ
โช๏ธ WHERE: ํน์ ํ์์ ์งํ์ค ๋๋ ์งํ์๋ฃ๋ ๋ฏธ์ ๋ง์ ์กฐํ.
โช๏ธ ํ์ด์ง ์ฒ๋ฆฌ๋ฅผ ์ํด ์ปค์๋ฅผ ์ฌ์ฉ
โช๏ธ ์์ ์๊ฐ์ ๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌํ์ฌ 3๊ฐ์ฉ ์กฐํ
INSERT INTO review (member_mission_id, store_id, content, rating, created_at)
VALUES (?, ?, ?, ?, NOW()); //ํด๋นํ๋ ๊ฐ์ ๋ฐ์ธ๋ฉ ๋ณ์๋ก ์ฒ๋ฆฌ
โ ๋ฆฌ๋ทฐ ์์ฑํ๋ ์ฟผ๋ฆฌ
[sql ์ฟผ๋ฆฌ๋ฌธ ๋ถ์]
โช๏ธ INSERT INTO: ๋ฏธ์ ๊ณผ ๊ฐ๊ฒ์ id, ๋ฆฌ๋ทฐ ๋ด์ฉ, ๋ฆฌ๋ทฐ ํ์ , ์์ฑ ์๊ฐ์ ํฌํจํ๋ ๋ฆฌ๋ทฐ๋ฅผ ์์ฑ.
โช๏ธ VALUES: ๊ฐ ์ปฌ๋ผ์ ํด๋นํ๋ ๊ฐ์ ๋ฐ์ธ๋ฉ ๋ณ์๋ก ์ ๋ฌ (NOW()๋ ํ์ฌ ์๊ฐ ๊ฐ)
SELECT r.name, s.name, m.reward, datediff(m.deadline, NOW()),
(SELECT COUNT(*) FROM member_mission WHERE member_id = ?) //์งํ์๋ฃ์ธ ๋ฏธ์
์ ๊ฐ์ ์กฐํ
FROM region AS r
JOIN store AS s ON r.id = s.region_id
JOIN mission AS m ON s.id = m.store_id
WHERE r.name = ? //region์ name๊ฐ์ ๋ฐ์ธ๋ฉ ๋ณ์๋ก ์ฒ๋ฆฌ
AND m.id NOT IN (SELECT mission_id FROM member_mission WHERE member_id = ?) //์งํ์๋ฃ์ธ ๋ฏธ์
์ ์ ์ธ
ORDER BY m.deadline ASC //์ค๋ฆ์ฐจ์ ์ ๋ ฌ
LIMIT 10;
โ ํ ํ๋ฉด ์ฟผ๋ฆฌ