MCMLXIX

Menu
  • Accueil
  • Culture
  • Histoire
  • Pratique
  • Santé Bien-être
  • Société
  • Tech
Home
Tech
Créer une sous-requête avec condition sous Codeigniter
Tech

Créer une sous-requête avec condition sous Codeigniter

9 octobre 2018

Je mets ça en aide-mémoire vu que j’ai un peu ramé pour créer une sous-requête avec condition sous Codeigniter 3.1.6, l’active record ne prenant pas en charge cette fonctionnalité.

Le but de la manoeuvre est de renvoyer 1 pour vrai si un utilisateur est présent dans la table users_groups et si le nom du groupe passé également en paramètre de la fonction est un groupe valide dans la table groups.

Pour réaliser cela, il faut donc sélectionner 1 quand l’id de l’utilisateur est égal à l’id de session utilisateur passé en paramètre et quand l’id du groupe est présent dans la table des groupes d’après son nom complet.

Active record ne permettant pas cela directement, la requête doit être lancée puis son résultat stocké dans une chaîne renvoyée par la méthode get_compiled_insert([$table =  »[, $reset = TRUE]]) chargée dans la variable $query que l’on jouera après, ce qui donne (faites super gaffe aux quotes et guillemets) :

$query = $this->db->select("(SELECT 1 as ok FROM users_groups WHERE user_id = '".$user_id."' and group_id = (select id from groups where name = '".$nom_complet_du_groupe."'))", FALSE)->get_compiled_select();

La chaine $query est chargée du contenu de la requête. On peut alors la lancer avec :

$query = $this->db->query($query);

A ce niveau, on serait tenté de lancer un simple return $query->result(); récupéré par le contrôleur. Malheureusement, il sera compliqué de récupérer simplement la valeur unitaire dans une variable à cause de l’erreur Array to string conversion.

Puisque l’on sait qu’on ne renvoie qu’une valeur, on utilise la méthode row() qui ne renvoie… qu’une valeur :

$dac = $query->row();

$dac est maintenant chargé. Comment le renvoyer le nom du champ ? Facilement en fait grâce au select 1 as ok…

Un simple :

return $dac->ok;

vous en convaincra.

C’en est fini. Nous avons créé notre requête avec un sous-select sous condition puis renvoyé un champ unique réglant ainsi le problème des erreurs Array to string conversion ou stdClass object.

Tout rassemblé, l’obtention du résultat se fait avec :

$query = $this->db->select("(SELECT 1 as ok FROM users_groups WHERE user_id = '".$user_id."' and group_id = (select id from groups where name = '".$nom_complet_du_groupe."'))", FALSE)->get_compiled_select();
$query = $this->db->query($query);
$dac = $query->row();
return $dac->ok;
Partager
Tweet
Email
Article précédent
Article suivant

Articles en relation

Postgresql – Comment accélérer un GROUP BY
En SQL, un GROUP BY regroupe les enregistrements pour les …

Postgresql – Comment accélérer un GROUP BY

Résoudre le problème d’écriture sur disque windows10
Suite à une mise à jour Windows10, un ami a …

Résoudre le problème d’écriture sur disque windows10

Déposez un commentaire Annuler la réponse

Catégories

  • Culture
  • Histoire
  • Pratique
  • Santé Bien-être
  • Société
  • Tech

Archives

  • mars 2024
  • janvier 2024
  • novembre 2023
  • juin 2023
  • mai 2023
  • avril 2023
  • mars 2023
  • février 2023
  • décembre 2022
  • août 2022
  • octobre 2021
  • juillet 2021
  • juin 2021
  • mai 2021
  • avril 2021
  • mars 2021
  • février 2021
  • janvier 2021
  • décembre 2020
  • novembre 2020
  • octobre 2020
  • septembre 2020
  • août 2020
  • juillet 2020
  • mai 2020
  • avril 2020
  • mars 2020
  • février 2020
  • janvier 2020
  • novembre 2019
  • octobre 2019
  • septembre 2019
  • août 2019
  • juillet 2019
  • juin 2019
  • mai 2019
  • avril 2019
  • mars 2019
  • janvier 2019
  • décembre 2018
  • octobre 2018
  • septembre 2018
  • décembre 2017

MCMLXIX

Copyright © 2026 MCMLXIX

Bloqueur de publicité détecté

Votre blogueur de publicité est activé. Vous pouvez soutenir ce site en le débloquant

Refresh