Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3355 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [MySQL] - Sélectionner enregistrements qui ne sont pas ailleurs

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[MySQL] - Sélectionner enregistrements qui ne sont pas ailleurs

n°2331587
Furaxx
Posté le 08-04-2019 à 16:04:15  profilanswer
 

Bonjour,
 
J'ai en résumé 2 tables:
MODULES: id, nom, couleur
USERS2MODULES: id_user, id_module, actif
 
Lorsqu'on donne pour la première fois un accès à un module à un utilisateur, un enregistrement est créé dans la table USERS2MODULES avec "actif" à 1.
Si on souhaite désactiver l'accès au module à un utilisateur, afin d'éviter de perdre des résultats d'exercices (dont je ne parle pas ici), on ne supprime pas l'enregistrement mais on passe "actif" à 0.
 
Je souhaite, grâce à une requête pour voir récupérer la liste des modules auxquels un utilisateur n'a pas accès.
Il y a donc 2 possibilités:
- Il faut sélectionner tous les modules qui n'ont pas d'enregistrement dans USERS2MODULES pour l'utilisateur demandé
- Il faut aussi retourner les modules qui ont un état "actif" à 0 dans USERS2MODULES
 
Pour le moment j'arrive à faire soit l'un, soit l'autre mais pas les deux. Je chercher une solution depuis un moment sans y parvenir.
 
Par avance, merci pour votre aide!

mood
Publicité
Posté le 08-04-2019 à 16:04:15  profilanswer
 

n°2331588
rufo
Pas me confondre avec Lycos!
Posté le 08-04-2019 à 16:21:35  profilanswer
 

Utilises LEFT JOIN dans la première requête à laquelle, via un UNION, tu vas faire une seconde requête qui, elle, va chercher les actifs à 0.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2331593
s123459
Posté le 08-04-2019 à 19:56:32  profilanswer
 

+1 ;)
si tu as deja trouvé les 2 requetes, tu peux par exemple faire :
Requete 1 UNION Requete 2

n°2331595
Furaxx
Posté le 09-04-2019 à 10:03:55  profilanswer
 

Un UNION, tout simplement…
C'est fou, je n'y pense jamais à ça alors que c'est si simple au final.
 
Bref, c'est réglé:
 

Code :
  1. SELECT
  2.                     m.id AS id,
  3.                     m.nom AS nom,
  4.                     m.couleur AS couleur
  5.                 FROM
  6.                   modules m
  7.                 LEFT JOIN
  8.                   users2modules u2m
  9.                   ON m.id = u2m.id_modules
  10.                   AND u2m.id_user = :user_id
  11.                 WHERE
  12.                   u2m.id_modules IS NULL
  13.                 UNION
  14.                 SELECT
  15.                   m.id AS id,
  16.                   m.nom AS nom,
  17.                   m.couleur AS couleur
  18.                 FROM
  19.                   modules m
  20.                 INNER JOIN
  21.                   users2modules u2m
  22.                   ON u2m.id_modules = m.id
  23.                   AND u2m.actif = 0
  24.                   AND u2m.id_user = :user_id
  25.                 ORDER BY
  26.                   nom ASC


 
Merci! :)

n°2331597
MaybeEijOr​Not
but someone at least
Posté le 09-04-2019 à 10:39:17  profilanswer
 

À mon avis il y a moyen de faire plus simple avec un JOIN (FULL JOIN ?) et du filtrage, mais je ne suis pas expert en SQL et je n'ai pas envi de tester.


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°2331602
rufo
Pas me confondre avec Lycos!
Posté le 09-04-2019 à 12:01:50  profilanswer
 

Ah, le gars bosse sur du Oracle j'ai l'impression.
Des fois, vaut mieux 2 requêtes simples avec un UNION plutôt qu'une requête complexe qui sera plus lente et plus compliquée à faire évoluer ;)


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2331603
MaybeEijOr​Not
but someone at least
Posté le 09-04-2019 à 12:23:12  profilanswer
 

Oui ce n'est pas faux, c'est un peu comme les expressions régulières, parfois tu peux faire tout d'un coup mais au final c'est bien plus couteux.


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [MySQL] - Sélectionner enregistrements qui ne sont pas ailleurs

 

Sujets relatifs
[MySQL] Nombre de cours et exercices avec une seules requête[MySQL] temps fetching trop important
[MySQL] Plusieurs tables ou une seule grosse dans ce cas?Out of memory - sql Oracle/php
SQL Créer une vue avec Nom Champs et Valeur dans des enregistrementsProjet de stage php/mysql
[MySQL] Supprimer toutes les contraintes d'une tablesecuriser l'acces à la base mysql
MySQL Conflit Xampp / Wamp[MySQL] Combiner un select classique et un count()
Plus de sujets relatifs à : [MySQL] - Sélectionner enregistrements qui ne sont pas ailleurs


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR