以下のSQLクエリを参照してください。私は、ユーザテーブルのプロフィール画像を持つタスクテーブルのupdated_by
および/またはcreated_by
フィールド(いずれか新しいほうの方)に記録されている人物と一致する簡単なアクティビティフィードを作成しようとしています。このクエリは動作しますが、ON句では、ORテーブルの両方の要素がtrueを返すので、2つのフィールドに異なるユーザーがある場合は重複しますが、ユーザーテーブルの誰かに一致するcreated_by
があります。両方のフィールドが異なるユーザーで満たされている場合は、これを1に制限します。私は、ON句にCASE WHENを追加しようとしましたが、if/elseロジックがないので、両方とも真となり、同じ結果が返されます。このSQLクエリでINNER JOINとONを使用して重複を防止します。
(私は、変数として渡され、ステータス項目でWHERE句で結果を制限する能力を維持する必要があり、クエリはPHPの機能の中に含まれていることに注意してください。)
のアイデア?
SELECT tasks.*, users.profile_pic,
CASE WHEN tasks.updated_at > tasks.created_at
THEN tasks.updated_at
ELSE tasks.created_at
END AS recent_activity
FROM tasks
INNER JOIN users
ON tasks.updated_by = users.name OR tasks.created_by = users.name
WHERE status <> :status1 AND status <> :status2
ORDER BY recent_activity DESC LIMIT 10'
この場合、created_byはupdated_byより新しいでしょうか? – Uueerdo
SELECT句と同じCASE文をON句に使用します。 –
@Uueerdoすべてのタスクを含めると、作成されたアイテムは、新しいアイテムが頻繁に作成されるため、更新されたアイテムよりも新しいアイテムにすることができます。個々のタスクでは、更新されたタイムスタンプは常に作成されたタイムスタンプよりも新しいものになります。 – seibzehn