Signaler

Aide pour une requête assez simple [Résolu]

Posez votre question Mosa - Dernière réponse le 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.
Afficher la suite 
Utile
+0
moins plus
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
Ajouter un commentaire
Utile
+0
moins plus
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... ?
Mosa- 3 déc. 2016 à 12:08
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é ?
Répondre
yg_be 836Messages postés lundi 9 juin 2008Date d'inscription 7 décembre 2016 Dernière intervention - 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.
Répondre
Ajouter un commentaire
Utile
+0
moins plus
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
jeremims- 5 déc. 2016 à 13:44
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
Répondre
Ajouter un commentaire

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !