Alternance des couleurs et affichage de données étrangères

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Alternance des couleurs et affichage de données étrangères

par ouckileou » 04 août 2005, 13:50

Alors cela signifie que ma base est fausse :shock: mais pourtant j'ai eu l'occasion de la soumettre à mon enseignant et à un informaticien. Tous deux disaient la même chose... Mais je réalise qu'on dit peut-être la même chose mais pas avec le bon vocabulaire (de mon côté) :)
je ne crois pas qu'elle soit fausse
dans un de mes messages j'ai mis côte-à-côte ce que tu disais et ce que je disais : "1 société n'appartient qu'à 1 et 1 seul groupe"

donc si tu as une table "Sociétés", avec une clé étrangère vers une table "Groupes", c'est bon.

C'est dans ta théorie que tu disais des choses fausses. Question vocabulaire oui, csur un forum c'est vite fait de s'embrouiller avec ces choses là si on utilise pas les bons mots

Sinon oui, tu peux mélanger allégrement les champs que tu sélectionnes. Il faut juste que tu ne sélectionnes des champs que dans les tables listées dans le FROM.

par Elisa » 04 août 2005, 12:56

Ca y est !!!! J'ai pigé le principe de la jointure...

Voici la requete qui fonctionne pour ceux qui rencontreront un problème similaire:
$requete="SELECT IdSociete, NomSociete, AutreNomSociete, NomGroupe, Specialite, s.Presentation, s.InfCompl, PaysOrigine, Adresse, Tel, Fax, SiteSociete, NomReprFr, AdresseReprFr, TelReprFr, FaxReprFr
	FROM societes s, groupes g WHERE s.RefGroupe=g.IdGroupe ORDER BY IdSociete";
Merci à tous les deux.

J'ai d'autres soucis mais je crois qu'il faut faire un nouveau post, alors... j'y vais de ce pas.

par Elisa » 04 août 2005, 12:50

NomGroupe n'est pas dans la listes des champs récupérés par la requete...
Non c'est vrai... Mais est-ce que j'ai le droit de mélanger allègrement les champs de ma table "sociétés" à ceux de ma table "groupes"?
je ne suis pas d'accord :
1 - si tu as au moins une cardinalité 1,1, tu passes l'identifiant de l'entité source dans l'entité but (rassembler ou non dans une seule table n'a rien à voir)
2 - si tu as 2 cardinalités 1,n ou n,n : relation (table intermédiaire)
Alors cela signifie que ma base est fausse :shock: mais pourtant j'ai eu l'occasion de la soumettre à mon enseignant et à un informaticien. Tous deux disaient la même chose... Mais je réalise qu'on dit peut-être la même chose mais pas avec le bon vocabulaire (de mon côté) :)

par ouckileou » 04 août 2005, 12:41

cas 1 : 1 étudiant n'appartient qu'à 1 ou 1 seul club : Etudiants 1,1 <----> 0,n Clubs
1.A

Code : Tout sélectionner

Etudiants --------- id_etudiant nom_etudiant club --> tu mets directement le nom du club
1.B

Code : Tout sélectionner

Etudiants --------- id_etudiant nom_etudiant id_club ---> clé étrangère vers la table Clubs Clubs ----- id_club nom_club
ces deux solutions fonctionnent, mais la deuxième est un peu plus pratique puisque si le club "Echecs" change de nom pour devenir le club "Jeux de société", tu ne changes le nom qu'une seule fois
dès lors que tu as des valeurs qui se répétent, parmis un choix de quelques possibilités seulement, crée une nouvelle table

2 : 1 étudiant peut appartenir à 1 ou plusieurs clubs : Etudiants 1,n <---> 0,n Clubs

Code : Tout sélectionner

Etudiants --------- id_etudiant nom_etudiant Clubs ----- id_club nom_club est_membre ---> relation ---------- id_etudiant ---> clé étrangère id_club ----> clé étrangère
oui dans mon exemple un étudiant est obligé d'appartenir à un club sous peine de renvoi :lol:

par raptor » 04 août 2005, 12:36

NomGroupe n'est pas dans la listes des champs récupérés par la requete...

par ouckileou » 04 août 2005, 12:34

quand il y a ambiguïté de champ, il suffit de préciser de quelle table tu le prend oui
et tu peux donner toi-même un nom de "sortie" si le nom n'est pas exploitable directement ou trop long/compliqué, ceci avec AS

exemples :

Code : Tout sélectionner

SELECT NOW() AS date_du_jour; SELECT (SUM(notes) / (COUNT(notes)) AS moyenne FROM bulletin
"date_du_jour" et "moyenne" pourront être utilisés comme index du tableau renvoyé par mysql_fetch_array

donc tu peux utiliser cette solution pour ta requête, mais dans celle que tu as collé dans ton message précédent tu ne sélectionnes plus le nom du groupe c'est normal ?
Je pérore peut être mais il me semble:
cardinalité (1,1) => rassembler en une seule table
cardinalité (1, n) => Table1:IdTable = Table2:RefTable
cardinalité (n,n) => Table1 -> Table de relation <- Table 2
je ne suis pas d'accord :
1 - si tu as au moins une cardinalité 1,1, tu passes l'identifiant de l'entité source dans l'entité but (rassembler ou non dans une seule table n'a rien à voir)
2 - si tu as 2 cardinalités 1,n ou n,n : relation (table intermédiaire)

par Elisa » 04 août 2005, 12:13

Alors voilà, j'ai réglé le problème en partie:
$requete="SELECT IdSociete, NomSociete, AutreNomSociete, RefGroupe, Specialite, s.Presentation, s.InfCompl, PaysOrigine, Adresse, Tel, Fax, SiteSociete, NomReprFr, AdresseReprFr, TelReprFr, FaxReprFr
	FROM societes s, groupes g WHERE s.RefGroupe=g.IdGroupe ORDER BY IdSociete";
J'avais fait une erreur dans la requête. Et puis comme mes champs présentation et Informations complémentaires sont les mêmes dans mes deux tables, il y a vait ambiguïté.

MAIS pour l'affichage, j'ai tenté ceci dans un premier temps:
<td> <?php print ($val["NomGroupe"]);?> </td>
Puis j'ai tenté:
<td> <?php print ($val["g.NomGroupe"]);?> </td>
Puis je suis revenue à :
<td> <?php print ($val["RefGroupe"]);?> </td>
Et mon NOM de groupe ne s'affiche toujours pas...

par Elisa » 04 août 2005, 11:45

Bon j'ai compris il trouve mon champ 'Presentation' ambigü car c'est un champ qui se retrouve aussi dans la table Groupe. J'ai tenté de l'écrire comme ça:

Code : Tout sélectionner

<td> <?php print ($val["s.Presentation"]);?> </td>
Mais apparemment ce n'est pas la bonne méthode.
non, c'est une cardinalité 1,n
à partir du moment où tu as 1,1 d'un coté de la relation tu peux passer l'identifiant de l'entité but, dans l'entité source (ou l'inverse je ne sais plus comment on dit Embarassed )
et la table intermédiaire en question s'appelle une relation Wink
Je pérore peut être mais il me semble:
cardinalité (1,1) => rassembler en une seule table
cardinalité (1, n) => Table1:IdTable = Table2:RefTable
cardinalité (n,n) => Table1 -> Table de relation <- Table 2

par ouckileou » 04 août 2005, 11:37

cet exemple est pour le cas où 1 société ne peut appartenir qu'à 1 et 1 seul groupe
mais une société ne peut appartenir qu'à un seul groupe
Ca fonctionne quand même?
à mon avis oui :lol:
Parce que, si je me souviens bien de une relation (1,1) réclame une table intermédiaire?
non, c'est une cardinalité 1,n
à partir du moment où tu as 1,1 d'un coté de la relation tu peux passer l'identifiant de l'entité but, dans l'entité source (ou l'inverse je ne sais plus comment on dit :oops: )
et la table intermédiaire en question s'appelle une relation ;)

par Elisa » 04 août 2005, 11:34

cet exemple est pour le cas où 1 société ne peut appartenir qu'à 1 et 1 seul groupe
Mes tables sont de un à plusieurs:

un groupe peut avoir plusieurs sociétés
mais une société ne peut appartenir qu'à un seul groupe
une société peut avoir plusieurs produits
mais un produit ne peut être fabriqué que par une société.

Ca fonctionne quand même? Parce que, si je me souviens bien de une relation (1,1) réclame une table intermédiaire?

par ouckileou » 04 août 2005, 11:32

j'ai édité en rajoutant une ligne pour afficher les éventuelles erreurs MySQL

par Elisa » 04 août 2005, 11:30

mais il manque un guillemet ici : (deuxième xx)
$lien = mysql_connect("xx",xx","xx"); 
c'est peut-être pour ça que ça ne marche plus
Non, ça c'est parce que j'ai effacé mes mots-clés pour le forum :-"

par ouckileou » 04 août 2005, 11:27

oui c'est bien là

mais il manque un guillemet ici : (deuxième xx)
 $lien = mysql_connect("xx",xx","xx"); 
c'est peut-être pour ça que ça ne marche plus
sinon si le mysql_fetch_array ne marche pas, c'est peut-être qu'il y aune erreur dans la requête, fais ceci pour afficher les erreurs MySQL :
$result=mysql_query($requete) or die(mysql_error());
Je trouve le principe de la jointure tout simplement genial love1
Si je comprend le principe, je peux interroger n'importe quel champ de ma table groupe grâce à cette méthode? Ou bien est-ce un peu plus compliqué?
tu peux interroger tout ce que tu veux, il faut simplement un champ qui relie deux tables pour avoir les correspondances

Code : Tout sélectionner

Societes ---------- id_societe ---> clé primaire nom_societe id_groupe ---> clé étrangère Groupes ---------- id_groupe ----> clé primaire nom_groupe
ici tu peux connaitre le groupe d'une société car chaque ligne possède une clé étrangère vers la table groupe

cet exemple est pour le cas où 1 société ne peut appartenir qu'à 1 et 1 seul groupe

par Elisa » 04 août 2005, 11:21

Bon c'est pas gagné :lol:

Je trouve le principe de la jointure tout simplement genial :love1:
Si je comprends le principe, je peux interroger n'importe quel champ de ma table groupe grâce à cette méthode? Ou bien est-ce un peu plus compliqué?

Pour les couleurs, j'ai mis la ligne manquante mais je ne sais pas encore si c'est au bon endroit.

En effet, je ne peux pas vérifier car il ne reconnaît plus mon "fetch_array".

Voici le code tel qu'il se présente:

<?php
$couleur1 = '#ffcc00';
$couleur2 = '#ffffe0';
?>

<table class="tableau">
<table width=2000 rules="cols" border=0 cellspacing=0 cellpadding=10>

<!-- titres-->

<tr bgcolor="<?php echo $couleur1; ?>">
<td><b>Id</b></td>
<td><b>Nom</b></td>
<td><b>Autre nom</b></td>
<td><b>Groupe</b></td>
<td><b>Spécialité</b></td>
<td><b>Présentation</b></td>
<td><b>Inf.compl.</b></td>
<td><b>Pays d'origine</b></td>
<td><b>Adresse</b></td>
<td><b>Tel</b></td>
<td><b>Fax</b></td>
<td><b>Site société </b></td>
<td><b>NomReprFr </b></td>
<td><b>AdresseReprFr</b></td>
<td><b>TelReprFr</th>
<td><b>FaxReprFr </b></td>
</tr>

<?php
#connection à la base et sélection de la table et des champs#
	$lien = mysql_connect("xx",xx","xx");
	mysql_select_db("xx", $lien);

	$requete="SELECT IdSociete, NomSociete, AutreNomSociete, RefGroupe, Specialite, Presentation, InfCompl, PaysOrigine, Adresse, Tel, Fax, SiteSociete, NomReprFr, AdresseReprFr, TelReprFr, FaxReprFr
	FROM societes s, groupes g WHERE s.RefGroupe=s.IdGroupe ORDER BY IdSociete";
	$result=mysql_query($requete);


$cptCouleur = 1;
while ($val=mysql_fetch_array($result))
{
$couleur = ($cptCouleur % 2 == 0)?$couleur1:$couleur2;
?>

<tr bgcolor="<?php echo $couleur; ?>">	
<td> <?php print ($val["IdSociete"]);?> </td>
<td> <?php print ($val["NomSociete"]);?> </td>
<td> <?php print ($val["AutreNomSociete"]);?> </td>
<td> <?php print ($val["NomGroupe"]);?> </td>
<td> <?php print ($val["Specialite"]);?> </td>
<td> <?php print ($val["Presentation"]);?> </td>
<td> <?php print ($val["InfCompl"]);?> </td>
<td> <?php print ($val["PaysOrigine"]);?> </td>
<td> <?php print ($val["Adresse"]);?> </td>
<td> <?php print ($val["Tel"]);?> </td>
<td> <?php print ($val["Fax"]);?> </td>
<td> <?php print ($val["SiteSociete"]);?> </td>
<td> <?php print ($val["NomReprFr"]);?> </td>
<td> <?php print ($val["AdresseReprFr"]);?> </td>
<td> <?php print ($val["TelReprFr"]);?> </td>
<td> <?php print ($val["FaxReprFr"]);?> </td>
</tr>


<?php
$cptCouleur++; 
}
mysql_close($lien);
?>

</table>

<h4><center><a href="#debut">Haut de la page</a></center></h4>
</body></html>

par ouckileou » 04 août 2005, 10:56

tu peux sélectionner toutes tes infos en une seule requête :

Code : Tout sélectionner

SELECT IdSociete, NomSociete, AutreNomSociete, RefGroupe, NomGroupe, Specialite, Presentation, InfCompl, PaysOrigine, Adresse, Tel, Fax, SiteSociete, NomReprFr, AdresseReprFr, TelReprFr, FaxReprFr FROM societes s, groupes g WHERE s.RefGroupe = g.RefGroupe ORDER BY IdSociete";
c'est ça, une jointure :)