最新のステータスを内部結合で 2 つのテーブルから選択する
関連するデータを含む 2 つのテーブルがある場合、特定の情報を取得する必要があります両方のテーブルから。このシナリオには、Service と Status という 2 つのテーブルがあります。 Service テーブルには名前と ID が保存され、Status テーブルには各サービスに関連付けられたステータスとタイムスタンプが追跡されます。
各サービスの最新のステータスを取得するには、内部結合操作を利用できます。目標は、service_id 列に基づいて両方のテーブルの行を結合し、最新のステータス情報のみが返されるようにすることです。
残念ながら、あなたが言及したクエリは、service_id = 2 のサービスの最新ステータスのみを取得します。この制限に対処し、すべてのサービスの最新ステータスを取得するには、次の変更された SQL ステートメントを検討してください。
SELECT ser.id, ser.name, s.status, s.timestamp FROM Service ser INNER JOIN status AS s ON s.service_id = ser.id INNER JOIN ( SELECT service_id, MAX(timestamp) AS MaxDate FROM status GROUP BY service_id ) AS a ON a.service_id = s.service_id AND a.MaxDate = s.timestamp;
最後の内部結合内のサブクエリにより、すべてのサービスが削除されます。ただし、各サービスの最新のタイムスタンプを含むステータス。 service_id を比較し、最新のタイムスタンプを照合することで、クエリが目的の結果を返すことを保証できます:
id | name | status | timestamp |
---|---|---|---|
1 | Test1 | OK | October 15, 2015 09:08:07 |
2 | Test2 | OK | October 15, 2015 10:15:23 |
以上が内部結合を使用してすべてのサービスの最新ステータスを取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。