Aide pour une requête assez simple

Résolu/Fermé
Mosa - Modifié par Mosa le 30/11/2016 à 22:38
 jeremims - 5 déc. 2016 à 13:44
Bonjour,

Dans une base mysql j'ai créé deux tables, une table société et une table conf société

la table SOCIETE est constituée ainsi :
SOCIETE_ID
SOCIETE_NOM
SOCIETE_DOMAINE
SOCIETE_LOGO

SOCIETE_ID est l'index et unique. Jeu de donnée d'exemple :
1 | TOTO | toto.com | toto.gif
2 | TITI | titi.com | titi.gif
3 | TUTU | tutu.com | tutu.gif


la table SOCIETE_CONF est constituée ainsi :

SOCIETE_CONF_ID
SOCIETE_CONF_PARAM
SOCIETE_CONF_VALUE

SOCIETE_CONF_ID a une contrainte d'intégrité sur la table SOCIETE avec SOCIETE_ID et SOCIETE_CONF_ID

Voici un jeu de données

1 | STATUS | SAS |
1 | IPADRESSE | 11.11.11.11 |
1 | PAYS | FR |
2 | STATUS | EURL |
2 | IPADRESSE | 10.10.10.10 |
2 | PAYS | ES |
1 | STATUS | SASU |
1 | PAYS | DE |

j'ai les contraintes pour la table SOCIETE :
SOCIETE_DOMAINE = 'titi.com'

et SOCIETE_CONF
SOCIETE_CONF_ID=SOCIETE_ID correspondant a SOCIETE_DOMAINE = 'titi.com'

j'aimerai toutes les données alignées ainsi
2, TITI, titi.com,titi.gif, EURL, 10.10.10.10

est ce un UNION que je dois utiliser ? je n'arrive pas a structurer ma requette ... je n'ai pas les idées claires. .. pouvez vous m'aider

En question complémentaire, si je souhaite avoir le champs IPADRESSE de la SOCIETEID = 2 si elle existe, est ce possible ?

Merci de votre aide précieuse.



A voir également:

3 réponses

jordane45 Messages postés 38139 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 avril 2024 4 649
1 déc. 2016 à 13:30
Bonjour,

est ce un UNION que je dois utiliser ?

Non, je pense plutôt que c'est un JOIN ( ou LEFT JOIN ou INNER JOIN ou RIGHT JOIN ...)


En question complémentaire, si je souhaite avoir le champs IPADRESSE de la SOCIETEID = 2 si elle existe, est ce possible

Oui Il suffit de mettre un WHERE dans ta requête
0
yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024 1 471
1 déc. 2016 à 23:48
Je pense également que tu n'as pas les idées claires.
Quand tu écris "j'ai les contraintes pour la table SOCIETE :
SOCIETE_DOMAINE = 'titi.com' ", je pense que tu confonds "contrainte" et "critère de recherche".
Pourquoi as-tu choisi de structurer ainsi ta table "conf société" : as-tu envisagé de la structurer avec une colonne STATUS, une colonne PAYS, IPADRESSE, etc... ?
0
Tu as raison, ce n'est pas un contrainte mais un filtre de recherche !

Je l'ai structurée ainsi pour pouvoir ajouter autant de paramètre sans devoir changer la structure de la table de données. Ca me parait plus souple ainsi. Après peut etre je me suis complètement planté ?
0
yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024 1 471
3 déc. 2016 à 17:30
Je pense que ce serait plus simple d'obtenir "toutes les données alignées ainsi" si ta table était structurée avec une colonne par paramètre.
Tu as une vue d'ensemble sur ton exercice, à toi de choisir.
0
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
5 déc. 2016 à 11:12
Bonjour,

Tu peux essayer une requête de ce genre :
SELECT s.*, st.societe_conf_value as statut, ip.societe_conf_value
FROM societe s
LEFT OUTER JOIN societe_conf st ON st.societe_conf_id = s.societe_id AND st.societe_conf_param = 'STATUS'
LEFT OUTER JOIN societe_conf ip ON ip.societe_conf_id = s.societe_id AND ip.societe_conf_param = 'IPADRESSE'

Par contre, ce n'est effectivement pas très souple puisque tu devras modifier la requête si tu rajoutes un type de paramètre.
Il y a sans doute des façons plus compliquées de faire qui résoudront ce problème quelque soit le nombre de colonnes à transposer, mais je ne connais pas assez MySQL pour y répondre.

Xavier
0
Bonjour Xavier,

J'ai modifié ma table pour avoir des données alignée, c'est plus simple pour moi :-)

Merci de ton aide.

Jérémims
0