Dans les opérations de base de données, il est souvent nécessaire d'effectuer des sélections conditionnelles basées sur les données extraites d'autres tables. La sous-requête NOT IN de MySQL offre un moyen d'exclure des lignes d'une requête principale en fonction de leur absence dans une sous-requête.
Implémentation de CodeIgniter
Pour répliquer la requête MySQL mentionnée dans le question :
SELECT *<br>DE certs<br>WHERE id NOT IN (SELECT id_cer FROM revokace);<br>
en utilisant les méthodes de création de requêtes de CodeIgniter, vous pouvez utiliser l'approche suivante :
$this->db->select('*') ->from('certs') ->where('`id` NOT IN (SELECT `id_cer` FROM `revokace`)', NULL, FALSE);
La méthode Where() permet de transmettre directement n'importe quelle chaîne à incorporer dans la requête, évitant ainsi les conflits potentiels avec la méthode CodeIgniter. mécanismes d’évasion. Cependant, il est conseillé de faire preuve de prudence lorsque vous utilisez cette approche avec des entrées fournies par l'utilisateur afin d'éviter les attaques par injection SQL.
Bibliothèque de sous-requêtes optimisée
Vous pouvez également envisager d'utiliser une sous-requête spécialisée. bibliothèque qui peut améliorer la lisibilité du code et simplifier les requêtes complexes. L'exemple donné se traduirait par ce qui suit :
$this->db->select('*') ->from('certs') ->where('id', $this->subquery->subquery('where_in', function ($subq) { $subq->select('id_cer') ->from('revokace'); }, 'id', FALSE));
Cette bibliothèque simplifie la construction de sous-requêtes et permet des instructions SQL plus flexibles et plus expressives. Que vous optiez pour l'approche par chaîne directe ou que vous utilisiez une bibliothèque, ces méthodes vous permettent d'implémenter efficacement les sous-requêtes NOT IN dans CodeIgniter.
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!