私は自分のサイトのプロファイルに「最近のアクティビティ」タブを作成しています。また、モデレータがサイト上で起こったことをすべて見るためのログを持っています。これには、何らかのアクティビティー・ログを作成する必要があります。アクティビティログを作成する最も効率的な方法
私はちょうど良いことが分かりません。
- 「アクティビティ」と呼ばれるテーブルを作成し、その後、毎回誰かが何かをする、アクションの種類とそれにレコードを追加し、ユーザID、タイムスタンプなど
- 問題:私は2つのオプションを持っています:テーブルが非常に長くなる可能性があります。
- 3つのテーブル(質問、回答、answer_comments)にすべて参加して、アクションが実行された順番にページ上に何らかの形で表示します。
- 問題:私はちょうど3つのテーブルを結合してを「ジョンはここで質問タイトルの答えにコメントし、」それはを言う作ることができるか見当もつかないので、これは非常に難しいだろう。
誰もがこのような状況でアクティビティログを作るのより良い方法を知っていますか?私はPHPとMySQLを使用しています。これがあまりにも非効率であるか難しい場合は、プロファイル上の[最近のアクティビティ]タブを忘れてしまいますが、引き続きモデレータのアクティビティログが必要です。
ここで私はオプション2のために作り始め、いくつかのSQLだが、アクションがコメント、質問、または私はwhile
ループ内の情報をエコーするときに答えるかどうかを検出する方法がないので、これは動作しません。
SELECT q.*, a.*, ac.*
FROM questions q JOIN answers a ON a.questionid = q.qid
JOIN answer_comments ac ON c.answerid = a.ans_id
WHERE q.user = $userid
AND a.userid = $userid
AND ac.userid = $userid
ORDER BY q.created DESC, a.created DESC, ac.created DESC
ありがとうございました!
申し訳ありませんが、 'a.userid'(それはタイプミスです)。とにかくおかげさまで!私はこれを試してみると、それがうまくいくなら私はあなたの答えを受け入れるでしょう:Dそして、それがコメント、質問、または答えであるかどうかを確認する方法に感謝します。 – Nathan
これはかなりうまくいく:)私はちょうど問題の情報を得るために質問表に参加することで小さな問題を抱えているので、それはリンクされていることができます。ここにSQLとPHPがあります:http://screencast.com/t/EJgdGkMPBB何らかの理由でコメント上に何かの理由でそれはタイトルのように質問IDを表示しているように見えますし、 //screencast.com/t/qvDzliDs9U私が知っていることのいくつかは '$ row ['SSlug ']'や(これはタイトルのURLスラッグですが)影響を受けてはいけません他のもの。 – Nathan
連想キーの名前は**最初の** 'SELECT'から来ます。すべての共通列( 'id、created、q_id、q_title')を選択し、別々の列を最後に選択する必要があります(' a.ans_id'と 'ac.id')。これは欠陥ではない - 「UNION」は同じデータを選択するために設計されている。空白のタイトルについては、 'q_title'ではなく' qTitle'を使用しています。 – andrewtweber