n'arrive pas a faire affiché certaine informations liés à deux tables

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 : n'arrive pas a faire affiché certaine informations liés à deux tables

par kweb » 04 oct. 2007, 17:14

Et bien ! je pense que je peux passer ce post en RESOLU.

encore une fois, MERCI a toutes les personnes qui ont participé à ces échanges. =D> =D> =D> =D>
grâce a vous, je progresse un peu plus.

par Tracker » 04 oct. 2007, 16:49

Une petite question :roll: : pourrais tu m'expliquer pourquoi tu a ajouter "MYSQL_ASSOC" ?
Si tu ne l'indiques pas, par défaut mysql_fetch_array fonctionne en mode BOTH, MYSQL_NUM + MYSQL_ASSOC et dans ton cas tu n'utilises que l'accès associatif au tableau. Tu aurais pu directement utiliser la fonction mysql_fetch_assoc...
// pour plus d'explication clique sur le lien ci-dessous, c'est la doc ;)
mysql_fetch_array(...)

par kweb » 04 oct. 2007, 16:45

:shock: Whhoouuaaa ! merci beaucoup

J'aurais aimé trouvé par moi même...... mais bon, je pense que j'aurai vraiment mis du temp.

c'est pour cela que je vais bien me pencher sur ta syntaxe pour la comprendre a 100%

Une petite question :roll: : pourrais tu m'expliquer pourquoi tu a ajouter "MYSQL_ASSOC" ?

par Tracker » 04 oct. 2007, 16:14

Bon, je reprends ton code du post précédent, en le bricolant un peu:
<?php
$sql=mysql_query("SELECT id_categorie, txt_categorie, nom_formation, id_categorie_formation, ville_formation, date_formation FROM formation LEFT JOIN categorie ON categorie.id_categorie = formation.id_categorie_formation ORDER BY txt_categorie") or die(mysql_error());

// initilisation de la variable contenant l'identifiant de la catégorie
$id_categorie = 0;

?><table><?php
    while ($affiche = mysql_fetch_array($sql, MYSQL_ASSOC))
    {
// Si l'identifiant est différent de celui mémoriser, c'est qu'on a une nouvelle catégorie
       if ($affiche['id_categorie'] != $id_categorie)
       {
?><tr><td colspan="2"><?php
          echo htmlentities($affiche['txt_categorie']);
          $id_categorie = $affiche['id_categorie'];
?></td></tr><?php                
       }
// affichage des infos de la formation
?><tr><td width="20px"></td><td><?php
        echo htmlentities(' - '.$affiche['nom_formation'].' - '.$affiche['date_formation'].' - '.$affiche['ville_formation']);
?></td></tr><?php
    }
?></table>
En modifiant, ça devrait te convenir. :wink:
ps: la première valeur donnée à $id_categorie ne doit correspondre à aucun identifiant de catégorie existant..

par kweb » 04 oct. 2007, 16:01

Oppss ! les tableaux....je n'ai jamais utilisé... donc bonjour les ennuis :cry:
Lorsque je consulte quelques site sur l'utilisation d'un array, les exemples donné sont assez simple.
c'est pas le même genre de tableau que tu indique.

Pour mieux comprendre:
lorsque tu écrit : "id_categorie1" ou "id_categorie2", ce sont des noms écrit au hasard ? c'est a remplacer par des variables ?

RAJOUT de dernière minutes
Je viens de lire le post précédent.... avec un peu de retard, faut il que j'en tienne compte des array??? par ce que la je ne voudrais pas partir sur de mauvaise piste.... :roll:
Attention, je ne cherche a blessé personne...

par Tracker » 04 oct. 2007, 15:57

Et en quoi ça va changer sa problématique d'affichage ?

Ta méthode serait utile s'il était impossible d'ordonner les infos par la clé de regroupement (txt_catégorie), il n'est pas dans cette situation.

par d0m » 04 oct. 2007, 15:30

Souvent dès qu'il y a du "je veux que ça apparaissetn qu'une fois", il faut penser à utiliser les tableaux associatifs.

en mettant l'id de ta catégorie en index et en valeur un tableau contenant les différentes formations :

Code : Tout sélectionner

array( id_categorie1 => array(id_formation1 => id_formation1, id_formation2 => id_formation2) id_categorie2 => array(id_formation4 => id_formation4) )

par kweb » 04 oct. 2007, 15:17

Slt,
Bon aller je me lance !!

Donc si j'ai bien compris, la requête SQL est bonne
$sql=mysql_query("
SELECT 
id_categorie, txt_categorie, nom_formation, id_categorie_formation, ville_formation, date_formation
				
FROM 
formation 
				
LEFT JOIN 
categorie 
				
ON categorie.id_categorie = formation.id_categorie_formation 

ORDER BY 
txt_categorie

") or die(mysql_error());
Il faut maintenant que je me penche sur les "conditions" pour que je puisse faire un affichage comme je le souhaite.
Chirurgien
- formation 1
- formation 2
- formation 3
-------------------
Médecin
- formation 4
Voici comment j'exposerais le problème:

DEBUT Boucle N°1 (while)
Condition : (SI le nom de la catégorie existe plus de 2 fois )
=========>j'affiche une seule fois le nom .

DEBUT Boucle N°2 (while)
Condition : ( SI la formation à le même ID (id_categorie_formation) QUE id_catégorie )
=========>j'affiche le nom de la formation
FIN Boucle N°2 (while)

FIN Boucle N°1 (while)

:?: :?: J'attends une suggestion avant de me lancer.... histoire que je ne bloque pas trois jour !

par iclo » 04 oct. 2007, 00:06

Bon aller, je me replonge dedans, mais je me laisse juste cette soirée pour souffler un peu..... :roll:
A demain
Excellente, idée, sérieusement, c'est un réflexe, plus ça bug, plus faut prendre du recul ;)

par kweb » 03 oct. 2007, 20:28

Bon aller, je me replonge dedans, mais je me laisse juste cette soirée pour souffler un peu..... :roll:
A demain

par iclo » 03 oct. 2007, 18:40

Dommage de jeter l'éponge.
Tu sais tous les dévellopeurs dans leur apprentissage se sont pris la tête sur un truc, avant de finir par comprendre. Ca arrive même souvent à des développeurs très expérimentés de temps à autres.

Je t'ai donné l'algo dont tu as besoin, il te suffit juste d'adapter l'affichage des données, si tu ne comprends pas une partie de ce code, pose-nous des questions. Avant de vouloir faire en sorte qu'un code fonctionne, il faut commencer par le comprendre



Maintenant, c'est toi qui vois...

par kweb » 03 oct. 2007, 16:50

Bon je crois que je vais jeter l'éponge, c'est pas de mon niveau.... sa fais déjà + 24h que je bloque sur ce problème.

Mes derniers tentative ont été d'essayer de faire une condition qui dirais :
SI le nom de la catégorie existe plus d'une fois, on ne l'affiche qu'une fois
et
SI la formation a le même ID que la catégorie, on l'affiche

mais sans succès.
Merci a tous ce qui ont participé a ce POST.

par Tracker » 03 oct. 2007, 15:48

Tu confonds ResultSet (résultat de la requête) et présentation HTML des informations.

Dans ton cas le ResultSet contiendra des lignes, chaque ligne correspondant à un cas particulier d'association Catégorie/Formation défini par le joint utilisé dans ta requête.

L'affichage de l'information (sous forme arborescente) n'a plus de rapport avec SQL (oublie Distinct). Tu dois exploiter les informations retournées par ton ResultSet pour générer l'affichage HTML que tu souhaites via PHP, comme te l'a clairement expliqué iclo (stockage de l'ancien txt_categorie, et comparaison avec la valeur courante pour savoir si tu fais une rupture d'affichage ou pas, pour chaque ligne du ResultSet).

Arrête de te torturer avec SQL, la solution n'est pas là !!.

par kweb » 03 oct. 2007, 14:51

Je te remercie pour ton explication qui est très explicite .
Mais, lorsque je test le tout, je reviens au résultat de tout a l'heure, c'est a dire :
Chirurgien
- formation 1
-------------------
Chirurgien
- formation 2
-------------------
Chirurgien
- formation 3
-------------------
Médecin
- formation 4
le code source lié à cette affichage :
$sql=mysql_query("
				SELECT 
				id_categorie, txt_categorie, nom_formation, id_categorie_formation, ville_formation, date_formation
				
				FROM 
				formation 
				
				LEFT JOIN 
				categorie 
				
				ON categorie.id_categorie = formation.id_categorie_formation 
				
				ORDER BY 
				txt_categorie
				
				") or die(mysql_error());


// initilisation de la variable contenant l'identifiant de la catégorie
$id_categorie = 0;

while ($affiche = mysql_fetch_array($sql))
	{
	// Si l'identifiant est différent de celui mémoriser, c'est qu'on a une nouvelle catégorie
	   if ($affiche['id_categorie'] != $id_categorie)
			{
			// affichage info catégorie
				echo $affiche['txt_categorie'].' <br /><br /> ';
				
			// On met à jour la variable qui contient l'identifiant de catégorie
				$id_categorie == $affiche['id_categorie'];
			}
	// affichage des infos de la formation
	echo ' - '.$affiche['nom_formation'].' - '.$affiche['date_formation'].' - '.$affiche['ville_formation'].'<br />';
	} 
?>
Une question, la requête "DISTINCT", ne pourrais pas me servir pour n'afficher qu'une fois la catégorie ?

J'ai beaux faire de recherche sur le net, je ne trouve aucun cas similaire ?
|*()

Un petit rajout :
n'est il pas possible de partir sur ce que j'avais fais au tout début. c'est a dire que j'arrivais a faire affiché le nom des catégories une seule fois .
$sql = "SELECT DISTINCT c.txt_categorie FROM formation f, categorie c WHERE f.id_categorie_formation = c.id_categorie";
$sql_retour =  mysql_query ($sql) or die (mysql_error());

while ($ligne = mysql_fetch_array($sql_retour))
			{	
			// Cr&eacute;ation d'un tableau
				echo '<table width="100%" border="0" cellspacing="1" cellpadding="0">';
				
				echo '<tr>';
				echo '<td colspan="5" id="recherche_date">';
				
			// Cellule DATE DE LA FORMATION
				echo '<span class="smallredtext">'.$ligne['txt_categorie'].'</span>' ;
				echo '</td>';
				echo '</tr>';
				
			// CREATION d'une deuxieme Lignes
				echo '<tr>';
				
			//Titre des cellules
				echo '<td width="20">&nbsp;</td>';
				echo '<td id="descriptif_Titre"><strong>Formation</strong></td>';
				echo '<td id="descriptif_Titre"><strong>date</strong></td>';
				echo '<td id="descriptif_Titre"><strong>Ville</strong></td>';
				echo '<td id="descriptif_Titre">&nbsp;</td>';
					
			// Fin de la deuxieme Ligne
				echo "</tr>";
et essayé de trouvé la suite du code qui me permettrais d'afficher toutes les formations lié au catégories ?

par iclo » 03 oct. 2007, 12:29

Bon en résumé, avant que je parte parte manger.
Quelques détails supplémentaires sur le code déja donné.
// initilisation de la variable contenant l'identifiant de la catégorie
$id_categorie = 0;
while ($affiche = mysql_fetch_array($sql)){
   // Si l'identifiant est différent de celui mémoriser, c'est qu'on a une nouvelle catégorie
   if ($affiche['id_categorie'] != $id_categorie){
      // affichage info catégorie
      .....
      // On met à jour la variable qui contient l'identifiant de catégorie
      $id_categorie == $affiche['id_categorie']
   }

   // affichage des infos de la formation
}
L'idée, c'est qu'on mémorise en permanence l'idendifiant de la catégorie.
Au début de l'algorithme, On initialise la variable avec un identifiant 0, qui ne sera pas dans la table, afin de forcer l'affichage de la première catégorie.

Au début de chaque itération, on regarde si la catégorie de l'enregistrement qu'on va afficher, est différente de celui de la ligne précédente.
Si c'est le cas, on a une nouvelle catégorie, on va alors afficher ses informations et mettre à jour la variable qui mémorise l'identifiant de catégorie, pour pouvoir réaliser le test, lors de l'itération suivante.
Ensuite, on affiche les informations sur la formation,