Partage
  • Partager sur Facebook
  • Partager sur Twitter

Besoin d'aide sur une requête SQL

Sujet résolu
8 septembre 2021 à 17:18:34

Bonjour à tous,

Je travaille sur une interface interne qui permettra la gestion d'équipement wifi et je bloque sur une requête SQL afin de récupérer une/des valeur(s) d'une table en fonction d'autres valeurs d'une autre table.

Je m'expliques plus précisément :

J'ai une table, ci-dessous, qui associe plusieurs clés primaires d'autres tables, soit l'id d'une zone, d'un batiment, d'une borne...

Et voici ma table borne à titre indicatif :

Ce que je souhaites faire dans ma requête, c'est de récupérer le nom de la ou les bornes qui ne sont pas associés à un id de zone dans ma table "mwd_zbib", par exemple ici avec ma requête, je veux avoir comme résultat le nom de borne "APWIFI002" car c'est la seule à ne pas être associée à l'id de zone 34 dans ma table "mwd_zbib".

Pour vous donner l'idée finale :

Je fais afficher dans cette box mutiple select, en premier, les bornes qui sont associées à la zone en question en les présélectionnant afin de dire que celles-ci sont déjà associées. Pour cela j'ai utilisé cette requête :

$reqzbib = $connectbdd->prepare('SELECT * FROM mwd_zbib, mwd_bornes WHERE mwd_bornes.id_borne = mwd_zbib.id_borne AND mwd_zbib.id_zone = ?');

Et puis j'ai utilisé le code PHP nécéssaire pour l'afficher dans la box.

Et donc, en second, juste en dessous des premiers résultats, j'aimerais afficher uniquement les bornes qui ne sont pas associées à la zone en question. C'est pour cela que je viens vous demander de l'aide pour la requête SQL sur laquelle je bloque.

Pourriez vous me donner un petit coup de main s'il vous plait ?  ^^

Merci d'avance pour tout.

  • Partager sur Facebook
  • Partager sur Twitter
8 septembre 2021 à 18:44:03

tu veux les bornes qui ne sont pas associés à la zone, ou qui n'ont aucune zone associées ?

SELECT DISTINCT borne_nom FROM mwd_bornes
 LEFT JOIN  mwd_zlib 
 ON mwd_bornes.id_borne=mwdzbib.id_borne
 WHERE id_zone is null OR id_zone <>?

En remplaçant le ? par l'id_zone de la zone, tu as la liste des noms de bornes qui ne sont pas associées à cette borne (et donc celles qui ne sont pas associées du tout)
Si tu retires le OR id_borne <>?, tu aura les noms des bornes qui ne sont pas associées du tout

  • Partager sur Facebook
  • Partager sur Twitter
9 septembre 2021 à 9:34:44

umfred a écrit:

tu veux les bornes qui ne sont pas associés à la zone, ou qui n'ont aucune zone associées ?

SELECT DISTINCT borne_nom FROM mwd_bornes
 LEFT JOIN  mwd_zlib 
 ON mwd_bornes.id_borne=mwdzbib.id_borne
 WHERE id_zone is null OR id_zone <>?

En remplaçant le ? par l'id_zone de la zone, tu as la liste des noms de bornes qui ne sont pas associées à cette borne (et donc celles qui ne sont pas associées du tout)
Si tu retires le OR id_borne <>?, tu aura les noms des bornes qui ne sont pas associées du tout

Hello Umfred !

C'est bien les bornes qui ne sont pas associées à la zone en question. Donc ta requête fonctionne à l'excellence ! Je n'avais plus cette syntaxe en tête et j'ai essayé plusieurs requête en restant dans mon mode de réflexion qui n'était pas le bon.

Merci beaucoup pour ton aide !

Excellente journée !

  • Partager sur Facebook
  • Partager sur Twitter
9 septembre 2021 à 10:18:54

Bonjour,

Petite proposition personnelle, je préfère mettre les conditions dans la jointure externe, car je trouve que cela rend plus propre la clause WHERE, notamment quand il y a d'autres conditions qui ne concerne pas la jointure externe.

Si j'ai bien compris le sujet :

SELECT DISTINCT B.borne_nom
FROM
	mwd_bornes B
		LEFT JOIN mwd_zlib L
			ON B.id_borne = L.id_borne
			AND L.id_zone <> ?
WHERE L.id_zone is null

Avec les alias pour éviter les confusions et ambiguïtés ...

  • Partager sur Facebook
  • Partager sur Twitter
Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
9 septembre 2021 à 17:12:42

Benzouye a écrit:

Bonjour,

Petite proposition personnelle, je préfère mettre les conditions dans la jointure externe, car je trouve que cela rend plus propre la clause WHERE, notamment quand il y a d'autres conditions qui ne concerne pas la jointure externe.

Si j'ai bien compris le sujet :

SELECT DISTINCT B.borne_nom
FROM
	mwd_bornes B
		LEFT JOIN mwd_zlib L
			ON B.id_borne = L.id_borne
			AND L.id_zone <> ?
WHERE L.id_zone is null

Avec les alias pour éviter les confusions et ambiguïtés ...

Hello Benzouye !

Effectivement je l'ai modifiée de la même manière que votre proposition de mon côté par la suite, car j'avais justement une autre condition qui s'est ajoutée à la suite ^^

Merci tout de même pour votre réponse !

Au plaisir !

-
Edité par Mathis D. 9 septembre 2021 à 17:13:26

  • Partager sur Facebook
  • Partager sur Twitter
9 septembre 2021 à 19:52:24

Bonjour,

Je suis bloqué au niveau d'exécution de commandes SQL

j'ai tapé C:\SQL\remplissageAnimal.sql;

et ça fonctionne pas toujours après plusieurs essaies 

si vous pouvez m'aider à trouver la solution 

je suis sur windows10 

merci d'avance

Cordialement

  • Partager sur Facebook
  • Partager sur Twitter

Mzebla Ikhlas

10 septembre 2021 à 9:19:44 - Message modéré pour le motif suivant : Ne pas répondre à un déterrage


10 septembre 2021 à 10:00:35

Bonjour,

Déterrage

Citation des règles générales du forum :

Avant de poster un message, vérifiez la date du sujet dans lequel vous comptiez intervenir.

Si le dernier message sur le sujet date de plus de deux mois, mieux vaut ne pas répondre.
En effet, le déterrage d'un sujet nuit au bon fonctionnement du forum, et l'informatique pouvant grandement changer en quelques mois il n'est donc que rarement pertinent de déterrer un vieux sujet.

Au lieu de déterrer un sujet il est préférable :

  • soit de contacter directement le membre voulu par messagerie privée en cliquant sur son pseudonyme pour accéder à sa page profil, puis sur le lien "Ecrire un message"
  • soit de créer un nouveau sujet décrivant votre propre contexte
  • ne pas répondre à un déterrage et le signaler à la modération

Je ferme ce sujet. En cas de désaccord, me contacter par MP.

  • Partager sur Facebook
  • Partager sur Twitter
Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL