現在、何らかの形式のループ内で次のことを行う方法を見つけようとしています (できれば、データベースのパフォーマンスに影響を与えずに)。
私は 3 つのテーブルを持ってuser_hours
いuser_calendar
ますhours_statistics
。私は最初に行う必要があります:
SELECT user_calendar.date_start,
user_calendar.opportunity_id,
user_hours.user_id,
user_hours.agreed_hours,
user_hours.completed_hours,
user_hours.hours_committed
FROM user_calendar
JOIN user_hours
ON user_calendar.user_calendar_id = user_hours.user_calendar_id
WHERE user_calendar.date_start = CURRENT_DATE()
AND user_hours.completed_hours IS NULL
AND user_hours.hours_committed = 'accepted'
このクエリは、次のように返されます。
したがって、返された各機会 ID とユーザー ID について、次のようにします。
UPDATE user_hours
SET completed_hours = agreed_hours,
hours_committed = 'completed'
WHERE opportunity_id = {opportunity_id}
AND user_id = {user_id}
AND hours_committed = 'accepted'
AND completed_hours IS NULL
この時点で {opportunity_id} と {user_id} をループする必要があることに注意してください (スクリーンショットを参照)。機会ごとに各ユーザーを調べる必要があるためです。
次に、更新されたレコードごとに、次のような合計時間を取得する必要があります。
// Get hours they have done to send to statistics data table
SELECT sum(completed_hours) FROM user_hours WHERE user_id = {user_id} AND opportunity_id = {opportunity_id}
// Get the completed hours total somehow as a variable
$completed_hours = (from result above)
// Commit stats
UPDATE hours_statistics SET completed_hours = (completed_hours+$completed_hours)
WHERE user_id = {user_id} AND opportunity_id = {opportunity_id}
誰かがこれをある種の手順またはトリガーとして書くのを手伝ってくれますか、またはこのことをループするための出発点を得るために正しい方向に私を助けてくれますか? クエリは手動で機能します。統計の更新を実行するには、ループ/自動で行う必要があります。