Phpmyadmin sql jointure / restriction
Résolu
necro27
Messages postés
160
Date d'inscription
Statut
Membre
Dernière intervention
-
necro27 Messages postés 160 Date d'inscription Statut Membre Dernière intervention -
necro27 Messages postés 160 Date d'inscription Statut Membre Dernière intervention -
Bonjour à toutes et à tous,
Bon je ne sais pas donner de termes exacts à mon problème pour le titre.
Je m'explique :
Je dispose d'une base de données où je possède 5 tables, que sont la table type matériel, matériel, famille et sous famille, et recenser qui est en fait une association entre la table materiel et ss-famille.
Mon souci :
Avec l'aide d'une (ou plusieurs) requêtes sql, j'essaie de répondre à la question suivante :
Existe t'il un matériel ayant pour
id_fam = 1 et id_ss_fam = 1
ET id_fam = 2 et id_ss_fam = 1
ET id_fam = 3 et id_ss_fam = 2
....etc
En gros j'essaie de faire quelque chose qui se comprendrait comme cela (ce qui est impossible je sais en sql, enfin je pense)
"where id_famille=1.id_ss_famille=1
and id_famille=2.id_ss_famille=1
and id_famille=3.id_ss_famille=2
...
En d'autres termes, je voudrai pouvoir faire un tri sur un id_ss_famille relatif à un id_famille, sachant que mon matériel peut posséder plusieurs familles...
Je ne vois vraiment pas de quelle manière je peux m'y prendre, aussi bien avec une, que plusieurs requêtes sql...
Merci à ceux qui voudrons bien m'aider. Pour information, je travaille sur un site intranet, donc où mes requêtes sont exécutées via php.
Si besoin de plus d'information, ne pas hésiter merci beaucoup d'avance.
[EDIT] : voici certains essai, qui bien sûr ne fonctionnent pas.
Necro27
Bon je ne sais pas donner de termes exacts à mon problème pour le titre.
Je m'explique :
Je dispose d'une base de données où je possède 5 tables, que sont la table type matériel, matériel, famille et sous famille, et recenser qui est en fait une association entre la table materiel et ss-famille.
type_materiel(id_type, lib_type) famille(id_fam, lib_fam) ss_famille(id_fam#, id_ss_fam, lib_ss_fam) materiel (id_mat, id_type#) recenser (id_fam#, id_ss_fam#, id_mat#)
Mon souci :
Avec l'aide d'une (ou plusieurs) requêtes sql, j'essaie de répondre à la question suivante :
Existe t'il un matériel ayant pour
id_fam = 1 et id_ss_fam = 1
ET id_fam = 2 et id_ss_fam = 1
ET id_fam = 3 et id_ss_fam = 2
....etc
En gros j'essaie de faire quelque chose qui se comprendrait comme cela (ce qui est impossible je sais en sql, enfin je pense)
"where id_famille=1.id_ss_famille=1
and id_famille=2.id_ss_famille=1
and id_famille=3.id_ss_famille=2
...
En d'autres termes, je voudrai pouvoir faire un tri sur un id_ss_famille relatif à un id_famille, sachant que mon matériel peut posséder plusieurs familles...
Je ne vois vraiment pas de quelle manière je peux m'y prendre, aussi bien avec une, que plusieurs requêtes sql...
Merci à ceux qui voudrons bien m'aider. Pour information, je travaille sur un site intranet, donc où mes requêtes sont exécutées via php.
Si besoin de plus d'information, ne pas hésiter merci beaucoup d'avance.
[EDIT] : voici certains essai, qui bien sûr ne fonctionnent pas.
select distinct m.id_materiel from materiel as m, recenser as r, famille as f, ss_famille as ssf where f.id_famille=ssf.id_famille and m.id_materiel=r.id_materiel and r.id_famille=ssf.id_famille and r.id_ss_famille=ssf.id_ss_famille and m.id_materiel=1 and ssf.id_famille in (1,2,3,4) and ssf.id_ss_famille in (1,2,3)
select m.id_materiel from materiel as m, recenser as r, famille_technique as f, ss_famille as ssf where f.id_famille=ssf.id_famille and m.id_materiel=r.id_materiel and r.id_famille=ssf.id_famille and r.id_ss_famille=ssf.id_ss_famille and m.id_type_materiel=1 and ssf.id_famille = 1 and ssf.id_ss_famille= 3 and ssf.id_famille = 2 and ssf.id_ss_famille= 2 and ssf.id_famille = 3 and ssf.id_ss_famille= 2 and ssf.id_famille = 4 and ssf.id_ss_famille= 1
select m.id_materiel from materiel as m, recenser as r where m.id_materiel=r.id_materiel and m.id_type_materiel=1 and m.id_materiel in ( select m.id_materiel from materiel m, recenser r where m.id_materiel=r.id_materiel and r.id_famille = 2 and r.id_id_ss_famille= 2 ) and m.id_materiel in ( select m.id_materiel from materiel m, recenser r where m.id_materiel=r.id_materiel and r.id_famille = 1 and r.id_id_ss_famille = 3 )
Necro27
A voir également:
- Phpmyadmin sql jointure / restriction
- Restriction instagram - Guide
- Code restriction ps5 oublié - Forum Contrôle parental
- Restriction messenger - Forum Facebook Messenger
- Logiciel sql - Télécharger - Bases de données
- Code de restrictions perdu ✓ - Forum iPhone
2 réponses
Bon apparemment pour mon cas il faudrait voir avec union et intersect..
Après lectures, et tests avec union, je m'aperçois que intersect serais plu approprié pour mon problème.
Seulement d'après d'autres lectures, phpmyadmin ne semble pas reconnaitre intersect...
Comment trouver quelque chose d'équivalent ?
J'ai trouvé des aides ici http://oseox.fr/sql/union-jointure.html
il est bien dit que
"L'intersection de A et de B contiendra des éléments qui sont à la fois dans A et dans B."
Donc on aura bien comme résultat un élément commun entre a et b ?
Mais cette fonction n'a l'air de fonctionner qu'avec 2 tables, il n'y a pas moyen de le faire seulement sur une seule table ?
Donc en gros je voudrai le numéro de matériel qui possède pour famille 1 la sous-famille 3, ET qui possède pour famille 2 la sous-famille 2, ET pour la famille 3 la sous-famille 2...
Merci de pouvoir m'aider...
Après lectures, et tests avec union, je m'aperçois que intersect serais plu approprié pour mon problème.
Seulement d'après d'autres lectures, phpmyadmin ne semble pas reconnaitre intersect...
Comment trouver quelque chose d'équivalent ?
J'ai trouvé des aides ici http://oseox.fr/sql/union-jointure.html
il est bien dit que
"L'intersection de A et de B contiendra des éléments qui sont à la fois dans A et dans B."
Donc on aura bien comme résultat un élément commun entre a et b ?
Mais cette fonction n'a l'air de fonctionner qu'avec 2 tables, il n'y a pas moyen de le faire seulement sur une seule table ?
select id_materiel from recenser where id_famille = 1 and id_caracteristique = 3 intersect select id_materiel where id_famille = 2 and id_caracteristique = 2 intersect select id_materiel where id_famille = 3 and id_caracteristique = 2
Donc en gros je voudrai le numéro de matériel qui possède pour famille 1 la sous-famille 3, ET qui possède pour famille 2 la sous-famille 2, ET pour la famille 3 la sous-famille 2...
Merci de pouvoir m'aider...