申し訳ありませんが、これをうまく説明できません。数日後にスレッドをロックする MyBB プラグインをコーディングしようとしています。表の重要な列は次のthreads
とおりですtid, fid, lastpost, lastpostuserid, closed, sticky
。posts
テーブルにはpid, tid, fid, dateline
.
fid
実行する必要があるフォーラム ( ) のリストがあります。ボットが投稿する特定のユーザー ID からの投稿を無視して、一定の日数内に応答がないフォーラムのすべてのスレッドを更新する必要があります。lock
、sticky
、 (スレッドを移動するため)を更新するfid
か、返信を投稿する必要があります。
プラグインは PHP にあるので、結果を処理する必要がある場合はそこで実行できます。
私の問題は、基本的な SELECT または UPDATE コマンドを過ぎた SQL クエリにあまり慣れておらず、これをどのクエリに分割する必要があるのか わからないことです。
更新: わかりました、この投稿はあまり明確ではありませんでした。
私が持っているテーブル:
threads
:tid, fid, subject, prefix, icon, poll, uid, username, dateline, firstpost, lastpost, lastposter, lastposteruid, views, replies, closed, sticky, numratings, totalratings, notes, visible, unapprovedposts, attachmentcount, deletetime
posts
:pid, tid, replyto, fid, subject, icon, uid, username, dateline, message, ipaddress, longipaddress, includesig, smilieoff, edituid, edittime, visible, posthash
必要なもの:
ロック (ロック フィールドを 1 に更新)、スティッキー (スティッキー フィールドを 1 に更新)、または移動 (fid を指定された値に変更)、または返信 (適切な tid を使用して新しい投稿を作成) する必要があります。指定された fid (フォーラム ID) を持つスレッド。
私が抱えている問題は、それを分解する方法がわからないことです。SQL は非常に複雑なクエリを実行できるため、複数のクエリを実行して結果を解析する必要がなくなります。
擬似コード:
fid
$fid でlastpost
$days 日以内のすべてのスレッドを検索し、lastposterid
$userid (ボットが投稿したユーザー) ではありません$userid
fid
を持つスレッドについては、 . $userid ではなく、$days 前の最高の投稿をすべて検索します。を保管してください。lastposterid
tid
posts
tid
uid
dateline
tid
それら
tid
のスレッドも取得します。これで、$days 以上前にボットからのものではない最後の応答を持つすべてのスレッドが得られました。指定されている場合は、それらのスレッドの lock、sticky、または fid フィールドを更新します。
返信が設定されている場合、そのスレッドへの返信として新しい投稿を作成します。
そういう意味ですか?私はこれを説明するのが苦手であることを理解しています。