Improve query

This commit is contained in:
daru
2022-06-29 18:42:29 +02:00
parent 022ff8d0f9
commit 0461ec1717
2 changed files with 13 additions and 20 deletions

View File

@@ -43,7 +43,3 @@ func BytesToInt64AndDate(bytes []byte) (int64, time.Time, error) {
func Int64AndDateToBytes(num int64, appoint time.Time) []byte { func Int64AndDateToBytes(num int64, appoint time.Time) []byte {
return []byte(fmt.Sprintf("%d%s%s", num, AppointSplit, appoint.Format(time.RFC3339))) return []byte(fmt.Sprintf("%d%s%s", num, AppointSplit, appoint.Format(time.RFC3339)))
} }
func PrintDate(t time.Time) string {
return t.Format("2006-01-02")
}

View File

@@ -6,7 +6,6 @@ import (
"encoding/base64" "encoding/base64"
"encoding/json" "encoding/json"
"fmt" "fmt"
"time"
) )
//go:embed mm.cred //go:embed mm.cred
@@ -32,32 +31,30 @@ func MmReadOracle() ([]MmOracle, error) {
} }
oracleQuery := `SELECT m.id, m.title, m.mal_id, COALESCE(SUM(pv.score), 0) AS avgScore FROM movie m oracleQuery := `SELECT m.id, m.title, m.mal_id, COALESCE(SUM(pv.score), 0) AS avgScore FROM movie m
INNER JOIN vote pv ON (m.id = pv.movie_id) JOIN vote pv ON (m.id = pv.movie_id)
INNER JOIN promise pp ON (pp.user_id = pv.user_id) JOIN promise pp ON (pp.user_id = pv.user_id)
INNER JOIN evening me ON (pp.evening_id = me.id) JOIN evening me ON (pp.evening_id = me.id)
WHERE m.id NOT IN ( WHERE m.id NOT IN (
SELECT m2.id FROM movie m2 SELECT m2.id FROM movie m2
INNER JOIN evening_movie em2 ON (m2.id = em2.movie_id) JOIN evening_movie em2 ON (m2.id = em2.movie_id)
INNER JOIN evening e2 ON (em2.evening_id = e2.id) JOIN evening e2 ON (em2.evening_id = e2.id)
WHERE e2.date < ? WHERE e2.date < CURDATE()
) AND ( ) AND (
m.id IN ( m.id IN (
SELECT mm.movie_source FROM movie m3 SELECT mm.movie_source FROM movie m3
INNER JOIN movie_movie mm ON (m3.id = mm.movie_target) JOIN movie_movie mm ON (m3.id = mm.movie_target)
INNER JOIN evening_movie em3 ON (mm.movie_target = em3.movie_id) JOIN evening_movie em3 ON (mm.movie_target = em3.movie_id)
INNER JOIN evening e3 ON (em3.evening_id = e3.id) JOIN evening e3 ON (em3.evening_id = e3.id)
WHERE e3.date < ? GROUP BY m3.id WHERE e3.date < CURDATE() GROUP BY m3.id
) )
OR OR
m.id NOT IN ( m.id NOT IN (
SELECT mm.movie_source FROM movie m4 SELECT mm.movie_source FROM movie m4
INNER JOIN movie_movie mm ON (m4.id = mm.movie_source) JOIN movie_movie mm ON (m4.id = mm.movie_source)
) )
) )
AND pp.promised = 1 AND m.aired = 1 AND me.date >= ? AND me.date < ? GROUP BY m.id ORDER BY avgScore DESC, m.id ASC;` AND pp.promised = 1 AND m.aired = 1 AND me.date >= CURDATE() AND me.date < DATE_ADD(CURDATE(), INTERVAL 1 WEEK) GROUP BY m.id ORDER BY avgScore DESC, m.id ASC;`
today := PrintDate(time.Now()) rows, err := mmDb.Query(oracleQuery)
nextWeek := PrintDate(time.Now().AddDate(0, 0, 7))
rows, err := mmDb.Query(oracleQuery, today, today, today, nextWeek)
if err != nil { if err != nil {
return nil, err return nil, err
} }