From 42061ab3ae343e18b7fc7e2266bba8a38f8bc179 Mon Sep 17 00:00:00 2001 From: Michael Li Date: Sat, 30 Sep 2023 21:22:28 +0800 Subject: [PATCH] sqlx: optmize get index trends info data logic --- internal/dao/sakila/auto/cc/cc.go | 4 ++-- internal/dao/sakila/trends.go | 4 +++- internal/dao/sakila/yesql/yesql_cc.sql | 22 +++++++++------------- 3 files changed, 14 insertions(+), 16 deletions(-) diff --git a/internal/dao/sakila/auto/cc/cc.go b/internal/dao/sakila/auto/cc/cc.go index e84cdbb6..52bffb39 100644 --- a/internal/dao/sakila/auto/cc/cc.go +++ b/internal/dao/sakila/auto/cc/cc.go @@ -97,8 +97,8 @@ const ( _ShipIndex_IndexCountBySelf = `SELECT count(*) FROM @post WHERE is_del=0 AND (visibility=90 OR (visibility=0 AND user_id=?) OR (visibility=50 AND user_id IN (?)))` _SimpleIndex_Index = `SELECT * FROM @post WHERE visibility=90 ORDER BY is_top DESC, latest_replied_on DESC LIMIT ? OFFSET ?` _SimpleIndex_IndexCount = `SELECT count(*) FROM @post WHERE visibility=90` - _TrendsManager_CountIndexTrends = `SELECT count(*) FROM @contact c JOIN @user u ON c.friend_id=u.id JOIN @user_metric m ON c.friend_id=m.user_id WHERE c.user_id=? AND c.is_del=0 AND u.is_del=0 AND m.is_del=0 AND m.tweets_count>0` - _TrendsManager_GetIndexTrends = `SELECT u.username username, u.nickname nickname, u.avatar avatar FROM @contact c JOIN @user u ON c.friend_id=u.id JOIN @user_metric m ON c.friend_id=m.user_id WHERE c.user_id=? AND c.status=2 AND c.is_del=0 AND u.is_del=0 AND m.is_del=0 AND m.tweets_count>0 LIMIT ? OFFSET ?` + _TrendsManager_CountIndexTrends = `SELECT count(*) FROM @user_relation r JOIN @user u ON r.he_uid=u.id JOIN @user_metric m ON r.he_uid=m.user_id WHERE r.user_id=? AND m.is_del=0 AND m.tweets_count>0` + _TrendsManager_GetIndexTrends = `SELECT u.username username, u.nickname nickname, u.avatar avatar FROM @user_relation r JOIN @user u ON r.he_uid=u.id JOIN @user_metric m ON r.he_uid=m.user_id WHERE r.user_id=? AND m.is_del=0 AND m.tweets_count>0 ORDER BY r.style ASC LIMIT ? OFFSET ?` _Tweet_CountFollowingTweets = `SELECT count(*) FROM @post WHERE user_id=? AND is_del=0` _Tweet_CountFollowingTweetsFollow = `SELECT count(*) FROM @post WHERE (user_id=? OR (visibility>=60 AND user_id IN(?))) AND is_del=0` _Tweet_CountFollowingTweetsFriend = `SELECT count(*) FROM @post WHERE (user_id=? OR (visibility>=50 AND user_id IN(?))) AND is_del=0` diff --git a/internal/dao/sakila/trends.go b/internal/dao/sakila/trends.go index 38e045db..78a69e01 100644 --- a/internal/dao/sakila/trends.go +++ b/internal/dao/sakila/trends.go @@ -18,7 +18,9 @@ type trendsSrvA struct { func (s *trendsSrvA) GetIndexTrends(userId int64, limit int, offset int) (res []*cs.TrendsItem, total int64, err error) { if err = s.q.CountIndexTrends.Get(&total, userId); err == nil && total > 0 { - err = s.q.GetIndexTrends.Select(&res, userId, limit, offset) + if err = s.q.GetIndexTrends.Select(&res, userId, limit, offset); err == nil { + res = cs.DistinctTrends(res) + } } return } diff --git a/internal/dao/sakila/yesql/yesql_cc.sql b/internal/dao/sakila/yesql/yesql_cc.sql index c7ab08a2..e23ff5e8 100644 --- a/internal/dao/sakila/yesql/yesql_cc.sql +++ b/internal/dao/sakila/yesql/yesql_cc.sql @@ -243,30 +243,26 @@ SELECT count(*) FROM @following WHERE follow_id=? AND is_del=0; SELECT u.username username, u.nickname nickname, u.avatar avatar -FROM @contact c +FROM @user_relation r JOIN @user u -ON c.friend_id=u.id +ON r.he_uid=u.id JOIN @user_metric m -ON c.friend_id=m.user_id -WHERE c.user_id=? - AND c.status=2 - AND c.is_del=0 - AND u.is_del=0 +ON r.he_uid=m.user_id +WHERE r.user_id=? AND m.is_del=0 AND m.tweets_count>0 +ORDER BY r.style ASC LIMIT ? OFFSET ?; -- name: count_index_trends@trends_manager -- prepare: stmt SELECT count(*) -FROM @contact c +FROM @user_relation r JOIN @user u -ON c.friend_id=u.id +ON r.he_uid=u.id JOIN @user_metric m -ON c.friend_id=m.user_id -WHERE c.user_id=? - AND c.is_del=0 - AND u.is_del=0 +ON r.he_uid=m.user_id +WHERE r.user_id=? AND m.is_del=0 AND m.tweets_count>0;