#1 ๊ฐ์
ํ๋ก์ ํธ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค(Room) ๋ถ๋ถ์์ ์์ฑํ๋ DAO ํจ์์ ๋
ผ๋ฆฌ์ ์ค๋ฅ๋ฅผ ํด๊ฒฐํ๋ค.
#2 ๋ ผ๋ฆฌ์ ์ค๋ฅ - ORDER BY
#2-1 ๋ฌธ์ ์ฝ๋
...
@Dao
interface MainDAO {
...
@Query("SELECT * FROM DayMealView")
suspend fun getAllDayMeals(): List<DayMealView>
@Query("SELECT * FROM DayMealView LIMIT :limit")
suspend fun getAllDayMeals(limit: Int): List<DayMealView>
@Query("""
SELECT * FROM DayMealView
WHERE day_date <= :lastDate
AND meal_time <= :lastTime
AND meal_id != :lastId
LIMIT :limit
""")
suspend fun getNextDayMealsAfter(
lastDate: LocalDate,
lastTime: LocalTime,
lastId: Long,
limit: Int
): List<DayMealView>
@Query("SELECT * FROM DayMealView WHERE meal_id = :mealId LIMIT 1")
suspend fun getDayMeal(mealId: Long): DayMealView
}
๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๋ณต์์ ๋ ์ฝ๋๋ฅผ SELECTํ ๋, ์ ์งํ๊ฒ ๊ฐ์ ธ์ค์ง ์๋๋ค. ๋ฌด์จ ๋ง์ด๋๋ฉด, ๋ ์ฝ๋์ ์ ๋ ฌ๋ ์์ ๊ทธ๋๋ก๋ฅผ ์ง์ผ์ ๋ฐํํ์ง ์๋๋ค๋ ์๊ธฐ๋ค. DayMealView์ ์ฝ์
๋์ด์๋ ์์ ๊ทธ๋๋ก๋ฅผ ์ง์ผ์ ๋ฐํ๋๋ค๊ณ ์๊ฐํ๋ฉด ์ ๋๋ค. ์ฌ๋งํ๋ฉด ์์๊ฐ ์ง์ผ๊ฒ ์ง๋ง ๋ฐ๋์ ๊ทธ๋ ์ง๋ ์๋ค๋ ์๊ธฐ๋ค.
#2-2 ํด๊ฒฐ
...
@Dao
interface MainDAO {
...
@Query("""
SELECT * FROM DayMealView
ORDER BY day_date DESC,
meal_time DESC,
meal_id DESC
""")
suspend fun getAllDayMeals(): List<DayMealView>
@Query("""
SELECT * FROM DayMealView
ORDER BY day_date DESC,
meal_time DESC,
meal_id DESC
LIMIT :limit
""")
suspend fun getAllDayMeals(limit: Int): List<DayMealView>
@Query("""
SELECT * FROM DayMealView
WHERE day_date <= :lastDate
AND meal_time <= :lastTime
AND meal_id != :lastId
ORDER BY day_date DESC,
meal_time DESC,
meal_id DESC
LIMIT :limit
""")
suspend fun getNextDayMealsAfter(
lastDate: LocalDate,
lastTime: LocalTime,
lastId: Long,
limit: Int
): List<DayMealView>
@Query("""
SELECT * FROM DayMealView
WHERE meal_id = :mealId
ORDER BY day_date DESC,
meal_time DESC,
meal_id DESC
LIMIT 1
""")
suspend fun getDayMeal(mealId: Long): DayMealView
}
ORDER BY๋ฌธ์ ์ถ๊ฐํ๋ค. getDayMeal()์ ๋ณต์ ๊ฐ์ ๋ ์ฝ๋๋ฅผ ๊ฐ์ ธ์ค์ง ์๊ธฐ ๋๋ฌธ์ ORDER BY๋ฌธ์ด ํ์์๋ค. ํ์ง๋ง, ๋จธ์ง์์ ๋ฏธ๋์ getDayMeal()๋ฅผ ๋ณต์ฌใ๋ถ์ฌ๋ฃ๊ธฐํด ์๋ก์ด ๊ธฐ๋ฅ์ ์ํํ๋ DAO ํจ์๋ฅผ ์ถ๊ฐํ ๊ฒ ๊ฐ์ ์๊ฐ์ด ๋ค๊ธฐ์ (์ค์ ๋ฐฉ์ง๋ฅผ ์ํด) ๊ทธ๋ฅ ๋
๋๊ฒ ๋ค. ์ด ๋ถ๋ถ์ ๋์ค์ ๋ฆฌํฉํ ๋ง์ ๋ชฉ์ ์ผ๋ก ํ๋ก์ ํธ๋ฅผ ์ฒ์๋ถํฐ ๋๊น์ง ๋ค๋ฌ์ ๋ ์์ ๋ ๊ฒ์ด๋ค.
#3 ๋ ผ๋ฆฌ์ ์ค๋ฅ - AND
#3-1 ๋ฌธ์ ์ํฉ
| ... | meal_id | day_date | meal_time | ... |
| ... | ... | ... | ... | ... |
| ... | 81 | 2024-11-25 | 09:50:57.13994 | ... |
| ... | 80 | 2024-11-13 | 18:41:07.954925 | ... |
| ... | ... | ... | ... | ... |
'meal_id๊ฐ 80์ธ ๋ ์ฝ๋' ๋ค์ ๋ ์ฝ๋์ธ 'meal_id๊ฐ 81์ธ ๋ ์ฝ๋'๊ฐ LazyColumn ์์์ Load๋์ง ์๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค. ์ด๊ฒ๋ง ๋ด์๋ ๋ฌธ์ ์ ์์ธ์ ์ ์ ์์์ง๋ง, day_date๊ฐ ์ฐจ์ด๋๋ค๋ ์ ์์ ๋ญ๊ฐ ์๋ชป๋์ง ์์๋ ์ถ์ธก์ด ๋๋ค.
#3-2 ๋ฌธ์ ์ฝ๋
...
@Dao
interface MainDAO {
...
@Query("""
SELECT * FROM DayMealView
WHERE day_date <= :lastDate
AND meal_time <= :lastTime
AND meal_id != :lastId
ORDER BY day_date DESC,
meal_time DESC,
meal_id DESC
LIMIT :limit
""")
suspend fun getNextDayMealsAfter(
lastDate: LocalDate,
lastTime: LocalTime,
lastId: Long,
limit: Int
): List<DayMealView>
...
}
๋ฌธ์ ๋ AND์ ๋จ๋ฐ์ด์๋ค. date๊ฐ ์๊ฑฐ๋ ๊ฐ์ผ๋ฉด์ ๋์์ time์ด ์๊ฑฐ๋ ๊ฐ์ผ๋ฉด์ ๋์์ meal_id๋ ๋ฌ๋ผ์ผํ๋ค๋ ์กฐ๊ฑด. ์ด ์กฐ๊ฑด์ AND์ ๋์ด๋ก ๊ตฌ์ฑ๋์๋๋ฐ, ์ด๋ฌ๋ฉด ๋ด๊ฐ ์ ํํ ์ํ๋ ์กฐ๊ฑด๊ณผ ๋
ผ๋ฆฌ์ ์ผ๋ก ๋ค๋ฅธ ์กฐ๊ฑด์ด ๋๋ค.
DayMealView๋ 1์ฐจ๋ก date์ ๋ํด ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํ๊ณ , date๊ฐ ๊ฐ์ผ๋ฉด time์ ๋ํด time๋ง์ ๊ฐ์ผ๋ฉด id์ ๋ํด ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํ๋ ํ
์ด๋ธ์ด๋ฉฐ, ์ด ํ
์ด๋ธ์ ์ ๋ ฌ ์กฐ๊ฑด์ ์ค์ํ์ฌ WHERE๋ฌธ์ ์์ฑํ์ด์ผ ํ๋ค. ์ ๋๋ก ๋ค์ ์ฟผ๋ฆฌ์ WHERE๋ฌธ์ ์์ ํด ๋ด๊ฐ ์ ํํ ์ํ๋ ์กฐ๊ฑด๊ณผ ๊ฐ๊ฒ ๋ง๋ค์ด๋ณธ๋ค.
#3-3 ํด๊ฒฐ
...
@Dao
interface MainDAO {
...
@Query("""
SELECT * FROM DayMealView
WHERE day_date < :lastDate
OR (day_date = :lastDate AND meal_time < :lastTime)
OR (day_date = :lastDate AND meal_time = :lastTime AND meal_id < :lastId)
ORDER BY day_date DESC,
meal_time DESC,
meal_id DESC
LIMIT :limit
""")
suspend fun getNextDayMealsAfter(
...
): ...
...
}
#3-2์์ ๋งํ ๋ด๊ฐ ์ ํํ ์ํ๋ ์กฐ๊ฑด ๊ทธ๋๋ก๋ฅผ ์ฟผ๋ฆฌ๋ฌธ์ ๋ฃ์๋ค. WHERE ๋ฌธ์ด DayMealView์ ์ ๋ ฌ ์กฐ๊ฑด์ ์ค์ํ๊ฒ ๋ง๋ ๊ฒ์ด๋ค.
#4 ์์ฑ๋ ์ฑ
#4-1 ์ด ๊ฒ์๊ธ ์์ ์ Commit
GitHub - Kanmanemone/nutri-capture-new
Contribute to Kanmanemone/nutri-capture-new development by creating an account on GitHub.
github.com
#4-2 ๋ณธ ํ๋ก์ ํธ์ ๊ฐ์ฅ ์ต์ Commit
GitHub - Kanmanemone/nutri-capture-new
Contribute to Kanmanemone/nutri-capture-new development by creating an account on GitHub.
github.com
'๊ฐ๋ฐ ์ผ์ง ๐ป > Swemo' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| Nutri Capture - INSERT ๋ฐ DELETE ๋ฒํผ ๊ตฌํ (1) | 2024.11.28 |
|---|---|
| Nutri Capture - DeleteDayMeal ์ด๋ฒคํธ ์ถ๊ฐ (0) | 2024.11.28 |
| Nutri Capture - ๋ฌดํ ์คํฌ๋กค ๋ก์ง ๋ฆฌํฉํ ๋ง (1) | 2024.11.16 |
| Nutri Capture - Room ๋ฌด๊ฒฐ์ฑ ๋ณด์ (1) | 2024.11.15 |
| Nutri Capture - ์ฑํ UI ๊ตฌ์กฐ ์ก๊ธฐ (1) | 2024.11.14 |