Une méthode efficace pour récupérer efficacement les réservations non annulées
Cet article explique comment récupérer efficacement les informations de réservation non annulées à partir de deux tables (table de réservation et table de journal de réservation). La table de réservation stocke les détails de la réservation et la table du journal de réservation enregistre les modifications de réservation.
Une solution consiste à sélectionner d'abord les réservations annulées et à les exclure des résultats. Cependant, cette méthode nécessite des connexions supplémentaires à la table du journal des abonnements pour obtenir les abonnements annulés, ce qui est moins efficace.
Une solution plus efficace consiste à utiliser la clause NOT IN
dans une sous-requête :
<code class="language-sql">SELECT * FROM reservation WHERE id NOT IN (select reservation_id FROM reservation_log WHERE change_type = 'cancel');</code>
Cette requête récupère toutes les lignes de la table reservation
où la colonne id
ne figure pas dans le résultat de la sous-requête. La sous-requête sélectionne les valeurs reservation_log
dans la table change_type
où reservation_id
est « annuler ».
Une autre option consiste à utiliser les clauses LEFT JOIN
et WHERE
:
<code class="language-sql">SELECT r.* FROM reservation r LEFT JOIN reservation_log l ON r.id = l.reservation_id AND l.change_type = 'cancel' WHERE l.id IS NULL;</code>
Cette requête utilise LEFT JOIN
pour inclure toutes les lignes de la table reservation
, qu'elles aient ou non des lignes correspondantes dans la table reservation_log
. La clause WHERE l.id IS NULL
filtre toutes les lignes de la table reservation_log
où existe une ligne correspondante de change_type='cancel'
, ne laissant que les réservations non annulées.
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!