Sélection parmi deux tables avec jointure interne et LIMIT
Pour récupérer le dernier statut de chaque service dans deux tables, Service et Statut, un la jointure interne peut être utilisée.
Pour référence, les tables existantes sont :
Service :
Colonnes :
Statut :
Colonnes :
Le résultat souhaité est le dernier statut de chaque service, comme indiqué ci-dessous :
id | name | status | timestamp |
---|---|---|---|
1 | Test1 | OK | October, 15 2015 09:08:07 |
2 | Test2 | OK | October, 15 2015 10:15:23 |
La déclaration précédente avait des limites pour récupérer les derniers statuts :
SELECT ser.id, ser.name, a.status, a.timestamp from Service ser inner join (select * from status order by Status.timestamp DESC limit 1) as a on a.service_id = ser.id
Pour pour assurer la sélection correcte du dernier statut, une sous-requête est nécessaire pour identifier l'horodatage maximum pour chaque service :
SELECT service_id, MAX(timestamp) AS MaxDate FROM status GROUP BY service_id
Cette sous-requête crée une nouvelle table avec deux colonnes : service_id et MaxDate. La colonne MaxDate représente le dernier horodatage de chaque service.
À l'aide de cette sous-requête, la requête principale peut être modifiée pour joindre la table Service avec la table d'horodatage maximum :
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;
En rejoignant sur à la fois le service_id et le MaxDate, seul le dernier statut de chaque service sera affiché, garantissant le résultat souhaité.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!