1

ユーザーがランダムな日付で何かを投稿する基本的なWebサイトを想像してみてください。システムはmysql-phpを使用し、各投稿をテーブルに格納し、tablePostを呼び出し、列に日付(または時刻)を格納します。ユーザーは1日に複数の投稿を投稿できることに注意してください。私が達成したいのは、ユーザーが投稿した過去4日間(またはそれ以上)の日付を取得できるようにすることです。また、投稿情報(postid、posttextなど)も取得されます。出力例は次のとおりです。
-2012-04-25(3投稿、postinfo ...)
-2012-04-12(2投稿、postinfo ...)
-2011-09-12(33投稿、postinfo ...)
-2011-03-04(10件の投稿、postinfo ...)

私は2つの解決策を想像することができます:

1)tablePostテーブルのみを使用し、phpでエントリを反復処理し、必要なデータをフェッチします

2)別のテーブルを作成し、tableActiveDaysを呼び出します。ユーザーが投稿すると、エントリ(userId、dateDay)がINSERT IGNOREを使用して挿入されるか、以前に挿入されていないかどうかがチェックされます。したがって、各(userId、dateDay)は一意です。このように、過去4日間のアクティブな日数を取得する場合は、単純なselect ... order by ... limitby4クエリを使用できます。

私の質問は次のとおり
です。-このタスクを達成する他の方法はありますか?
-これを達成するための最も効率的な方法は何ですか?

4

1 に答える 1

0

フィールドを作成INTEGERし、「dt_timestamp」と呼びます。ユーザーがメッセージを投稿すると、関数の結果「dt_timestamp」に保存されtime()ます。

更新:
ユーザーを登録している場合は、INTEGERタイプのフィールドを追加し、それを呼び出しますlast_activity。ユーザーが何かを投稿したら、このフィールドを で更新しますtime()。次に、次のクエリを使用します。

SELECT pt.* FROM post_table pt JOIN users_table ut ON ut.id = pt.user_id WHERE pt.dt_timestamp >= ut.last_activity - 86400 * 4 AND ut.id = %needed_user_id%;

users_tablehas フィールドid- ユーザーの ID。post_tablehas field user_id- users_table のフィールド値。

使用DATETIMEは、整数のタイムスタンプよりもはるかに遅くなります。

于 2012-05-01T11:07:55.647 に答える