私はこのクエリを持っています(SQLFiddle):
SELECT
c.name,
a.user_id,
a.status_id,
a.title,
a.rtime,
u.user_name,
s.status_name
FROM company c
LEFT JOIN action a ON a.company_id=c.id
LEFT JOIN user u ON u.id=a.user_id
LEFT JOIN status s ON s.id=a.status_id
WHERE u.user_name='Morgan'
-- WHERE c.name='Fiddle'
GROUP BY c.id
HAVING a.rtime IS NULL OR a.rtime = (
SELECT max(rtime)
FROM action a2
WHERE deleted IS NULL
AND a2.company_id = c.id
)
問題1
すべての会社をリストして、ユーザーと会社が最後に会社に対してアクションを行ったステータスを表示したいと思います。同時に、何も行われていない会社を表示します。
問題2
また、名前でユーザーを検索できるようにする必要があります。これにより、このユーザーが最後に活動した企業をすべて選択できます。クエリはフォームから作成されるため、変数を挿入できます。
現在のところ、データベースSCHEMAを変更することはできませんが、将来の移行のためのアドバイスはかなり役に立ちます。
私はそれを一緒にバインドしようとしましたINNER JOIN ( SELECT.. ) t ON
が、私はそれの周りに頭を得ることができません。
私はまた、から方法を試してみた ここで、ここでは、とここで私は、最新のアクティビティ権を持つ人を取得することはできません。
MySQLバージョン:5.5.16。会社のテーブルの行数は約1ミルで、アクションテーブルは70Kになり、増加しています。ここではパフォーマンスが重要です。
これをどのように解決できますか?
MAX(Marks)
あたりをTaskID
、あなたが欲しいMAX(ActivityDate)
ごとにCompany
)あなたが一つのテーブルを持っているか、参加する場合の大きな違いはありません。