[php & mysql] tri d'une requete

Résolu/Fermé
Miko - 28 juil. 2010 à 09:45
 Miko - 28 juil. 2010 à 13:38
Bonjour,

Voici mon problème,
J'ai une table sql qui se présente sous cette forme

ID N°FORMULAIRE	PARTICIPATION	N°QUESTION	DATE	REPONSE

2236 	17 	131 	57  	2010-07-06 19:14:17 	Reponse 1
2237 	17 	131 	56  	2010-07-06 19:14:17 	Reponse 2
2238 	17 	131 	55 	2010-07-06 19:14:17 	Reponse 3

2239 	17 	132 	57  	2010-07-06 19:16:30 	Reponse 1
2240 	17 	132 	56  	2010-07-06 19:16:30 	Reponse 2
2241 	17 	132 	55 	2010-07-06 19:16:30 	Reponse 3


Actuellement j'arrive seulement a sortir par ID (tel que si dessus) mais pas a regroupé par champ PARTICIPATION

Je voudrais obtenir un résultat de ce type avec php sans faire une requête pour chaque PARTICIPATION

131:
       Date: 2010-07-06 19:14:17
	57: Reponse 1
	56: Reponse 2
	55: Reponse 3

132:
       Date: 2010-07-06 19:16:30
	57: Reponse 1
	56: Reponse 2
	55: Reponse 3


J'ai regarder du coté de foreach mais je m'embrouille vite les pinceaux...

N'étant pas expert en php si une bonne âme a un bout de code a me donner pour me guider je suis bien preneur, je cherche toujours de mon coté.

Merci à tous,
Miko (comme les glaces)

A voir également:

3 réponses

Leahkim Messages postés 3081 Date d'inscription jeudi 15 novembre 2007 Statut Membre Dernière intervention 2 mars 2014 279
28 juil. 2010 à 09:48
Directement dans ta requete, utilise l'option group by ou order by :)

0
salut j'ai testé mais cela ne me sort du coup que un résultat par PARTICIPATION
0
Defouille Messages postés 388 Date d'inscription mercredi 13 janvier 2010 Statut Membre Dernière intervention 15 novembre 2011 54
Modifié par Defouille le 28/07/2010 à 09:58
Bonjour,

voila un petit bout de code php qui fait ce que tu veux.
Le principe est de créer un tableau associatif avec 1er clé le numéro de participation, et contenant ensuite chaque ligne récupérée de la base.

// Creation tableau de participations 
// $resultat_requete = retour de ton appel sql 
$participations = array() 
while($row = mysql_fetch_array($resultat_requete)) 
{ 
 if(!isset($participations[$row['PARTICIPATION']]) 
  $participations[$row['PARTICIPATION']] = array(); 
 $participations[$row['PARTICIPATION']][] = $row ; 
} 

// Affichage 
if(count($participations) > 0) 
{ 
 foreach($participations as $num_participation => $participation) 
 { 
  echo $num_participation."<br/>"; 
  echo $participation[0]['DATE']."<br/>"; 
  foreach($participation as $question) 
   echo $question['N°QUESTION'].": ".$question['REPONSE']."<br/>"; 
 } 
}


note : il faut modifier mysql_fetch_array avec l'équivalent correspondant au type de ta base.

Il y a seulement 10 types de personnes, ceux qui comprennent le binaire, et les autres...
0
Salut, Merci pour ta réponse je pense que c'est la bonne voie mais ca ne veux pas encore, cela renvoi une page blanche sans erreur, je pense que c'est du au nommage je te met mon code en entier avec le vrai nom des champs mixé avec ton code, peut être va tu voir rapidement ce qui cloche

Le participation est RelAttendID
Question RelQuestionID
Date AnswerDateTime
et la reponse Answer
$host = "xxxxxx";
$user = "xxxxx";
$bdd = "xxxxx";
$passwd  = "xxxx";
mysql_connect($host, $user,$passwd) or die("erreur de connexion au serveur");

mysql_select_db($bdd) or die("erreur de connexion a la base de donnees");

// Creation et envoi de la requete
$query = "SELECT 'RelAttendID' , 'RelQuestionID' , 'RelMemberID' , 'RelCampaignStatisticsID' , 'Email' , 'AnswerDateTime' , 'IP' , 'Answer'
FROM 'table'
WHERE 'RelSurveyID' =17 ORDER BY 'RelAttendID'"; 


$resultat_requete = mysql_query($query);

// Creation tableau de participations 

$participations = array() 
while($row = mysql_fetch_array($resultat_requete)) 
{ 
 if(!isset($participations[$row['RelAttendID']]) 
  $participations[$row['RelAttendID']] = array(); 
 $participations[$row['RelAttendID']][] = $row ; 
} 

// Affichage 
if(count($participations) > 0) 
{ 
 foreach($participations as $num_participation => $participation) 
 { 
  echo $num_participation."<br/>"; 
  echo $participation[0]['AnswerDateTime']."<br/>"; 
  foreach($participation as $question) 
   echo $question['RelQuestionID'].": ".$question['Answer']."<br/>"; 
 } 



en tout cas merci pour ta réponse rapide :)

Miko
0
Defouille Messages postés 388 Date d'inscription mercredi 13 janvier 2010 Statut Membre Dernière intervention 15 novembre 2011 54
28 juil. 2010 à 10:40
es-tu sur que ta requête te renvoi des enregistrements ?
tu peux tester comme cela :

while($row = mysql_fetch_array($resultat_requete)) 
{
 echo "<pre>";
 print_r($row);
 echo "</pre>";
 if(!isset($participations[$row['RelAttendID']]) 
  $participations[$row['RelAttendID']] = array(); 
 $participations[$row['RelAttendID']][] = $row ; 
} 
0
Merci defouille, mais malheureusement cela me renvoi du blanc aussi
pourtant cette requête sur phpmyadmin me renvoi bien les champs que je demande

j'ai testé la connexion fonctionne

c'est à rien n'y comprendre !
0
Defouille Messages postés 388 Date d'inscription mercredi 13 janvier 2010 Statut Membre Dernière intervention 15 novembre 2011 54
28 juil. 2010 à 10:57
teste :

$resultat_requete = mysql_query($query);

$num_rows = mysql_num_rows($result_requete);

echo "$num_rows Rows\n";
0
Resultat:
1014 Rows 


je suis sur php 5.1 / mysql 5.0.77 si ca change qqch...
0
Fonx2 Messages postés 331 Date d'inscription dimanche 6 avril 2008 Statut Membre Dernière intervention 5 mai 2013 132
28 juil. 2010 à 11:56
Et si tu fais un "GROUP BY" dans ta requète SQL?
0
Defouille Messages postés 388 Date d'inscription mercredi 13 janvier 2010 Statut Membre Dernière intervention 15 novembre 2011 54
28 juil. 2010 à 11:57
S'il fait un group by il va perdre des infos.
0
Fonx2 Messages postés 331 Date d'inscription dimanche 6 avril 2008 Statut Membre Dernière intervention 5 mai 2013 132
28 juil. 2010 à 12:00
Lesquels?
0
Defouille Messages postés 388 Date d'inscription mercredi 13 janvier 2010 Statut Membre Dernière intervention 15 novembre 2011 54
28 juil. 2010 à 12:03
Réponse et num question, s'il fait un group by Participation.
0