L'exploitation de donnée

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

21 juil. 2005, 23:25

non $id_concours devrait correspondre à l'identifiant du concours de chaque ligne de résultat

donne nous la requête que tu exécutes aussi

Eléphant du PHP | 174 Messages

21 juil. 2005, 23:31

Code : Tout sélectionner

SELECT C.nom, C.mois, C. dmois, B.bande, M.mode, C.report, C.lien, C.info FROM concours C INNER JOIN concours_bande CB ON C.id_concours = CB.id_concours INNER JOIN bandes B ON CB.id_bande = B.id_bande INNER JOIN concours_mode CM ON C.id_concours = CM.id_concours INNER JOIN modes M ON CM.id_mode = M.id_mode ORDER BY C.id_concours
elle était visible plus haut dans le sujet

si je remplace $id_concours par 1 j'ai ce resultat :

Nom : Championnat de france HF Phonie
Mois : Février
Détails : dernier week-end
Report : RST + N° ex: (59001)
lien : http://www.ref-union.org
info : Aucune
Mode : phonie
Mode : phonie
Mode : phonie
Mode : phonie
Mode : phonie
Mode : phonie
Mode : télégraphie
Mode : télégraphie
Mode : télégraphie
Mode : télégraphie
Mode : télégraphie
Mode : télégraphie
Mode : phonie
Mode : télégraphie
Mode : phonie
Mode : télégraphie
Mode : phonie
Mode : télégraphie
Mode : phonie
Mode : télégraphie
Mode : phonie
Mode : télégraphie
Mode : mode digitaux
Mode : phonie

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

21 juil. 2005, 23:39

désolé je ne savais pas si elle avait changé ou non

dans cette requête il faut juste que tu sélectionnes id_concours

comme ça tu seras capable de voir quand est-ce que tu changes de concours

c'est le principe de l'algo que je t'ai donné :

tant que la ligne de résultat que tu traites à le même id_concours que celle du tour précédent, tu n'affiches pas les infos concours puisque tu els as déjà affiché pour ce concours

mais quand l'id_concours est différent, c'est un nouveau concours, donc tu affiches ces infos, et tu stockes ce nouvel id_concours comme l'id_concours courant pour continuer la même opération

est-ce que tu comprends le principe ?

Eléphant du PHP | 174 Messages

21 juil. 2005, 23:56

ORDER BY C.id_concours
1° - je dois identifier (les reliés) ceci avec la variable $id_concours

$id_concours = C.id_concours;

$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
$concours_courant = null;
while ($data=mysql_fetch_array($req)) {
  if ($id_concours <> $concours_courant){
   echo ' <i>Nom : '.$data['nom'].'</i><br>';
   echo ' <i>Mois : '.$data['mois'].'</i><br>';
   echo ' <i>Détails : '.$data['dmois'].'</i><br>';
   echo ' <i>Report : '.$data['report'].'</i><br>';
   echo ' <i>lien : '.$data['lien'].'</i><br>';
   echo ' <i>info : '.$data['info'].'</i><br>';
   $concours_courant = $id_concours;
   }
   echo ' <i>Mode : '.$data['mode'].'</i><br>';
   }
j'essayerais demains matin ton dernier post avec toutes tes infos :sleeping:

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

22 juil. 2005, 08:46

effectivement tu les tries bien par id_concours (ce qui est nécessaire) mais id_concours n'est pas présent dans ton SELECT

et si tu ne le récupères pas, tu ne pourras pas faire le test pour savoir à quel concours correspond la ligne que tu traites

Eléphant du PHP | 174 Messages

23 juil. 2005, 17:23

$sql = 'SELECT C.id_concours, C.nom, C.mois, C. dmois, B.bande, M.mode, C.report, C.lien, C.info
FROM concours C
INNER JOIN concours_bande CB
ON C.id_concours = CB.id_concours
INNER JOIN bandes B
ON CB.id_bande = B.id_bande
INNER JOIN concours_mode CM
ON C.id_concours = CM.id_concours
INNER JOIN modes M
ON CM.id_mode = M.id_mode
ORDER BY C.id_concours';

$id_concours = C.id_concours;

$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
$concours_mode = null;
$mode = $data['mode'];
while ($data=mysql_fetch_array($req)) {
  if ($id_concours <> $concours_mode){
   echo ' <i>Nom : '.$data['nom'].'</i><br>';
   echo ' <i>Mois : '.$data['mois'].'</i><br>';
   echo ' <i>Détails : '.$data['dmois'].'</i><br>';
   echo ' <i>Report : '.$data['report'].'</i><br>';
   echo ' <i>lien : '.$data['lien'].'</i><br>';
   echo ' <i>info : '.$data['info'].'</i><br>';
   $concours_mode = $id_concours;
   }
   for ($i=0; $i < count ($mode); $i++)
{
$chainemode .= $separateur . $mode[$i];
$separateur = ",";
echo 'mode' = .$chainemode.'<br>';
}
   }
j'ai une erreur à ce niveau : echo 'mode' = .$chainemode.'<br>';

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

23 juil. 2005, 17:35

on n'arrête pas de le répéter :
"j'ai une erreur ici " ça ne suffit pas, il faudrait aussi dire quel est le message d'erreur en question... sinon on est obligé de devienr

c'ets fatiguant

mais là je vais deviner, il y a un point en trop avant $chainemode

Eléphant du PHP | 174 Messages

23 juil. 2005, 17:40

Parse error: parse error, expecting `','' or `';'' in c:\program files\easyphp1-8\www\bconcours\list4.php on line 47

line 47 echo 'mode' = $chainemode.'<br>';
j'ai enlever le point

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

23 juil. 2005, 17:44

echo 'mode' = .$chainemode.'<br>';
cette chaine ne représente rien : tu mélanges echo et affectation

si tu veux afficher la chaine :
echo 'mode = .'$chainemode.'<br>';

Eléphant du PHP | 174 Messages

23 juil. 2005, 17:48

Toujours même erreur.
j'essaye tous lol
Modifié en dernier par elminio le 23 juil. 2005, 17:53, modifié 1 fois.

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

23 juil. 2005, 17:52

j'ai inversé . et '...
echo 'mode = '.$chainemode.'<br>';
cherche un peu toi aussi

Eléphant du PHP | 174 Messages

23 juil. 2005, 17:59

Qu'est ce que tu en pense du script ?

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

23 juil. 2005, 18:13

tu as compris le principe au niveau des infos du concours c'ets bien

par contre je ne comprend pas cette manipulation autour des modes

ou as-tu vu que tu récupèrais un tableau de modes ?

regarde le résultat que tu récupères dans phpMyAdmin, normalement tu dois avoir un mode par ligne, donc plusieurs pour chaque concours
c'est pour ça qu'on fait un test pour n'afficher qu'une fois les infos du concours qui se répètent, par contre afficher à chaque fois les infos du mode

Eléphant du PHP | 174 Messages

23 juil. 2005, 18:20

par contre je ne comprend pas cette manipulation autour des modes
j'essaye d'afficher les modes de cette façon :
phonie, télégraphie.
ou as-tu vu que tu récupèrais un tableau de modes ?
j'essaye seulement de d'effectuer la tache ci-dessus.
regarde le résultat que tu récupères dans phpMyAdmin, ...
un mode par ligne tout à fait ...

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

23 juil. 2005, 18:24

ok tu y es presque

je vais te faire un petit exemple de code
tu as déjà testé celui-là sinon ?

voici l'exemple
<?php
// les AS servent à donner des noms plus facilement utilisables avec mysql_fetch_array
$sql = 'SELECT C.id_concours AS id_concours, C.nom AS nom, C.mois AS mois, 
C. dmois AS dmois, B.bande AS bande, M.mode AS mode, C.report AS report, C.lien AS lien, C.info AS info
FROM concours C
INNER JOIN concours_bande CB
ON C.id_concours = CB.id_concours
INNER JOIN bandes B
ON CB.id_bande = B.id_bande
INNER JOIN concours_mode CM
ON C.id_concours = CM.id_concours
INNER JOIN modes M
ON CM.id_mode = M.id_mode
ORDER BY C.id_concours';

$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());

// variable qui va stocker l'identifiant du concours traité
$id_courant = null;

// tant qu'il y a des lignes de résultat
while ($data=mysql_fetch_array($req)) {
	// si l'identifiant du concours de la ligne courant est différent de celui stocké :
	// c'est un nouveau concours donc on affiche ss infos
	if ($id_concours <>  $data['id_concours']) {
		echo ' <i>Nom : '.$data['nom'].'</i><br>';
		echo ' <i>Mois : '.$data['mois'].'</i><br>';
		echo ' <i>Détails : '.$data['dmois'].'</i><br>';
		echo ' <i>Report : '.$data['report'].'</i><br>';
		echo ' <i>lien : '.$data['lien'].'</i><br>';
		echo ' <i>info : '.$data['info'].'</i><br>';
		echo ' modes : '; // on affiche le titre "modes"
		// on socke cet identifiant comme l'identifiant courant
		$id_courant = $data['id_concours'];
	}
	// on affiche le mode pour chaque ligne, avec une virgule à la fin
	echo $data['mode'].', ';
}
?>
il y aura des choses à modifier pour afficher les bandes aussi, mais tu as le principe appliqué ;)
Modifié en dernier par ouckileou le 23 juil. 2005, 18:30, modifié 1 fois.