1

Facebook のようなソーシャル ネットワーク サイトを構築しています。一部のように。私はphp&mysqlを使用しました。友達の最新のコメント アクションをすべて表示するインデックス ページに問題があります。

データベースを拡張させてください。

表のコメント:

comment_id 
content
datetime
author_id //who created this comment
profile_id //the user_id of the owner profile which this comment commented on.
parent_id //the comment id which is parent of this comment id. if the parent_id = 0 , so this comment is the main comment.

テーブル ユーザー:

user_id
...some user info fields...

テーブルの友情

user_id // who added another as friend.
friend_id // who was added as friend by another.
status // the status of this friendship, 0 is invited and 1 is alreay friend (accepted)

まず、すべてのフレンド ID を取得します。

$query = "select DISTINCT friend_id as friend from friendship where user_id = ".$user_id." and status = 1
    union
    select DISTINCT user_id as friend from friendship where friend_id = ".$user_id." and status = 1
    ";

次に、すべてのフレンド ID を配列に取得します。

foreach($total_friends as $each_friend){
        $all_friend_id[] = $each_friend['friend'];
    }

これで、フレンド ID 配列ができました。それから、限られた最新のコメントを取得しようとしています。サブコメントでもメインコメントでも、限定された最新のコメントを取得します。

"select * from comments where author_id IN ('".implode("','",$all_friend_id)."' order by datetime desc limit 0 , 20";

これで、並べ替えられた最新のサブおよびメイン コメント配列 (datetime で並べ替えられたベース) ができました。これがサブ コメントの場合、このコメントのメイン コメントを取得してから、すべてのサブ コメントを取得します。これがメイン コメントの場合、すべてのサブ コメントを取得します。

最後に、begin としてソートされたすべてのメイン コメントとサブ コメントを含む配列を取得します。これがイメージデモです。 http://rongcon.info/demo/abc/newst.PNG

メインコメントに最新のサブコメントが多数ある場合、メインコメントが重複する問題が発生します。しかし、私はそれを簡単に修正できます。

目標を達成しました。しかし、ajax で「古いコメント」を取得しようとしたときに発生した問題。

問題は古いコメントにあります。最初のリクエストで表示されたメインコメントにサブコメントが表示されることがあります。したがって、重複したメイン コメントを表示しますが、これは修正が必要なバグです。

2 つの方法で修正しようとしましたが、すべてのバグを処理することはできません。1. 表示されているすべてのメイン コメント ID を JavaScript で保存し、古いコメントをリクエストするときにそれを ajax に送信します。表示されるメイン コメント ID としての ID。だから私はこのバグを防ぐことができます。

しかし、私がますます古いコメントを取得しようとしているとき。表示されるメイン コメント ID の数が長くなり、パフォーマンスに大きな問題が生じるのではないかと心配しています。

  1. フォーラムで最新の返信があるトピックを表示するロジックを使用しました。各メイン コメントに「last_comment_date」を追加します。次に、サブコメントではなくメインコメントのみに基づいて最新のコメントを取得します。したがって、これは基本的なページネーション ロジックであり、古いコメントを表示するときに重複するコメントは表示されません。

しかし、友達のプロフィールで最新のメインコメントとサブコメントしか取得できず、友達の最新のサブコメントがあるメインコメントを取得できません。また落ちてる!

そこで、このページに最適なソリューションを求めています。構築したすべての人が私を助けることができますか? どうもありがとう!

4

1 に答える 1

1

おそらく、すべてのコメント (サブコメントを含む) を選択する代わりに、最初に親コメントのみを選択します... (parent_id=0)。

select * from comments where parent_id=0 and author_id IN ('".implode("','",$all_friend_id)."' order by datetime desc limit 0 , 20

次に、foreach の親に移動してサブコメントを取得します。そうすれば、ajax から古いコメントを取得するときに、親のないサブコメントの断片を取得することはできません。

遅くなるかもしれませんが…

于 2011-02-21T09:32:16.843 に答える