プロジェクト

全般

プロフィール

Enhancement(機能追加・改善) #2615

フレンド数ランキングとコミュニティ参加人数ランキングの処理で DQL 周りのコードが一部適切でない

Minoru Takai12年以上前に追加. 12年以上前に更新.

ステータス:
New(新規)
優先度:
Normal(通常)
担当者:
-
開始日:
2011-11-18
期日:
進捗率:

0%


説明

概要

  • https://github.com/tejimaya/opRankingPlugin/blob/v1.0.1/lib/opRankingPlugin.php#L55
      public static function getFriendRanking($max, $page)
      {
        $memberRelationships = Doctrine::getTable('MemberRelationship')->createQuery()
          ->select('COUNT(*), MemberRelationship.member_id_to')
          ->where('MemberRelationship.is_friend = ?', true)
          ->addWhere('m.is_active = ?', true)
          ->leftJoin('MemberRelationship.Member m')
          ->groupBy('m.id')
          ->orderBy('COUNT(*) DESC')
          ->offset($page * $max)
          ->limit($max)
          ->fetchArray();
    
  • https://github.com/tejimaya/opRankingPlugin/blob/v1.0.1/lib/opRankingPlugin.php#L98
      public static function getCommunityRanking($max, $page)
      {
        $communityMembers = Doctrine::getTable('CommunityMember')->createQuery()
          ->select('COUNT(*), community_id')
          ->groupBy('community_id')
          ->orderBy('COUNT(*) DESC')
          ->offset($page * $max)
          ->limit($max)
          ->fetchArray();
    

と DQL が記述されているが、 COUNT (*) にエイリアスを与えず SELECT 句と ORDER BY 句に記述しており、可読性が低く、パフォーマンス上も問題になり得る状態になっている。

->fetchArray(); の行を ->getSqlQuery(); に書き換え、結果を代入されている変数をデバッグ出力した結果は次の通り(ここでは改行を入れています)。

==== $memberRelationships
SELECT m.id AS m__id, m.member_id_to AS m__member_id_to, COUNT(*) AS m__0
  FROM member_relationship m
  LEFT JOIN member m2 ON m.member_id_to = m2.id
  WHERE (m.is_friend = ? AND m2.is_active = ?)
  GROUP BY m2.id
  ORDER BY COUNT(*) DESC
  LIMIT 10

==== $communityMembers 
SELECT c.id AS c__id, c.community_id AS c__community_id, COUNT(*) AS c__0
  FROM community_member c
  WHERE (c.is_pre = ?)
  GROUP BY c.community_id
  ORDER BY COUNT(*) DESC
  LIMIT 10

また、 getFriendRanking() メソッド内の方は、 MemberRelationship テーブルにエイリアスを与えず若干冗長な記述となっており、 member_id_to の使い方も不自然( member_id_from とすべき箇所を member_id_to としている)に見える。 member_id_to を member_id_from と入れ替える場合は、メソッド内の後続するコードで member_id_to と記述している箇所も書き換える必要がある。

対象バージョン

OpenPNE-3.6.0 にバンドルされている v1.0.1 時点のソースについて指摘している。最新バージョンで改善されればよい。

修正方針

概要に示した部分の修正と、それに関連して改善できそうな部分の修正を扱いたい。このチケットでどの程度の範囲までコードの修正を行うかは実装担当者に任せる。修正範囲を拡張し、チケットタイトルに対して修正内容がそぐわないようであれば、チケットの編集も行う。


関連するチケット

関連している opRankingPlugin - Bug(バグ) #2601: フレンド数ランキングページに表示されるフレンド数に、招待中のメンバーが含まれている New(新規) 2011-11-16
関連している opRankingPlugin - Bug(バグ) #2614: コミュニティ参加人数ランキングページに表示される参加人数に、参加申請承認待ちのメンバーが含まれている New(新規) 2011-11-18

履歴

#1 Minoru Takai12年以上前に更新

  • 説明 を更新 (diff)

他の形式にエクスポート: Atom PDF