[๐Ÿ”ฅ๋ฏธ์…˜ - 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;

โ†’ ํ™ˆ ํ™”๋ฉด ์ฟผ๋ฆฌ