Maison >base de données >tutoriel mysql >Comment récupérer des enregistrements avec des valeurs par défaut à l'aide de requêtes IN pour les données manquantes ?
Utilisation de requêtes IN pour récupérer des enregistrements avec des valeurs par défaut pour les données manquantes
Lors d'une requête sur l'activité en ligne d'un utilisateur au cours d'une plage de dates spécifique à l'aide d'une clause IN
, vous pouvez rencontrer des situations dans lesquelles certains ID utilisateur dans la condition IN
n'ont pas d'entrées correspondantes dans la table OnlineUsage
. Pour gérer cela et renvoyer les valeurs par défaut pour les données manquantes, une structure de requête modifiée est nécessaire.
Une requête standard peut renvoyer uniquement des résultats pour les ID avec des enregistrements correspondants. Pour inclure tous les identifiants de votre liste IN
, même ceux qui ne correspondent pas aux données d'utilisation en ligne, restructurez la requête pour exploiter un LEFT JOIN
(ou équivalent). La clé est de déplacer la condition de plage de dates de la clause WHERE
à la condition JOIN
.
<code class="language-sql">SELECT users.Name, users.ID, IFNULL(SUM(OnlineUsage.Minutes), 0) AS MinutesOnline FROM users LEFT JOIN OnlineUsage ON users.ID = OnlineUsage.ID AND OnlineUsage.Date >= '2016-01-01 00:00:00' AND OnlineUsage.Date < '2017-01-01 00:00:00' WHERE users.ID IN (1, 2, 3, 4, 5) -- Your list of IDs here GROUP BY users.ID;</code>
Cette requête révisée utilise un LEFT JOIN
pour garantir que tous les utilisateurs sont inclus. La fonction IFNULL
gère les cas où SUM(OnlineUsage.Minutes)
renvoie NULL
(pour les utilisateurs sans données d'utilisation en ligne) en remplaçant un 0
. La clause GROUP BY
est cruciale pour agréger MinutesOnline
correctement pour chaque utilisateur. Cette approche garantit un ensemble de données complet, fournissant une représentation cohérente de tous les utilisateurs dans le délai spécifié, qu'ils disposent ou non d'enregistrements d'utilisation en ligne.
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!