regrouper les résultats - boucles imbriquées ?

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 : regrouper les résultats - boucles imbriquées ?

par drfrank » 10 sept. 2006, 21:55

Ca m'a fait justement découvrir que je n'allais pas dans le bon sens.

Une nouvelle fois merci Cyrano.

par Cyrano » 08 sept. 2006, 16:45

Pour la logique, mets-toi au niveau de la logique d'un ordinateur :
  • 0 ou 1
  • ouvert ou fermé
  • vrai ou faux
  • oui ou non
Pars de là et essaye de suivre le code en te demandant ce qui se passe à tel endroit du code. Que se passe-t-il dans une boucle ? Quand s'arrête la boucle et que se passe-t-il après ?

C'est vraiment de la logique élémentaire, il ne faut pas chercher midi à quatorze heures et essayer d'interpréter des formule cabbalistiques, il faut simplement comprendre le principe de l'alternative oui ou non.

par drfrank » 08 sept. 2006, 15:47

et pour ajouter un "&" à la fin de chaque ligne des groupes ? (et pas entre les noms des groupes) ?

si tu as de la logique en stock, je t'en prendrais bien quelques kilos :-k

par Cyrano » 08 sept. 2006, 12:44

Alors modifie les instructions d'affichage de façon à ce que "titre =" n'apparaisse qu'une fois, en même temps que la date, donc dans le même if testant le changement de date. Ça donne quelque chose dans le genre :
<?php
$sql1 = "SELECT * ".
        "FROM concerts, groupes ".
        "WHERE concerts.id = groupes.idconcert ".
        "AND concerts.afficher = \"1\" ".
        "AND concerts.date >='$today' ".
        "ORDER BY concerts.date asc";
$req1 = mysql_query($sql1) or die('Erreur SQL !<br>'.$sql1.'<br>'.mysql_error());
    
$count = mysql_num_rows($req1);

//... 
/* On crée un point de repère pour détecter les changements de date */ 
$d = ""; 
for ($a = 1; $a < $count; $a++) 
{ 
    $data1 = mysql_fetch_array($req1); 
    $date1 = "".$data1["date"].""; 
    $datefr1 = realdate($date1);
    $nom1 = "".$data1["nom"].""; 
    /* Si la date a changé, on l'affiche */ 
    if($d != $datefr1) 
    { 
        /* On assigne la nouvelle date à notre point de repère */ 
        $d = $datefr1; 
        echo "<br>&date". $a ."=".$datefr1."&<br>"; 
        echo("&titre". $a ." = ");
    } 
     echo $nom1 ." ";
} 
//... 
?>

par drfrank » 08 sept. 2006, 11:49

oups, je suis en fait encore bloqué ...

en fait j'aurais besoin d'un affichage tel que :

date1= JEU 12 SEP
titre1= GROUPE 1 GROUPE 2

date2= VEN 13 SEP
titre2= GROUPE 3 GROUPE 4


alors que ça me donne :

date1= JEU 12 SEP
titre1= GROUPE 1
titre2= GROUPE 2

date3= VEN 13 SEP
titre3= GROUPE 3
titre4= GROUPE 4

$sql1 = "SELECT * FROM concerts, groupes WHERE concerts.id= groupes.idconcert AND concerts.afficher=\"1\" AND concerts.date>='$today' ORDER BY concerts.date asc";
$req1 = mysql_query($sql1) or die('Erreur SQL !<br>'.$sql1.'<br>'.mysql_error());
	
$count=mysql_num_rows($req1);


//... 
/* On crée un point de repère pour détecter les changements de date */ 
$d = ""; 
for ($a = 1; $a < $count; $a++) 
{ 
    $data1 = mysql_fetch_array($req1); 
    $date1 = "".$data1["date"].""; 
    $datefr1 = realdate($date1);
    $nom1 = "".$data1["nom"].""; 
    /* Si la date a changé, on l'affiche */ 
    if($d != $datefr1) 
    { 
        /* On assigne la nouvelle date à notre point de repère */ 
        $d = $datefr1; 
        echo "&date".$a."=".$datefr1."&<br>"; 
	} 
     echo "&titre".$a."=".$nom1."&<br>";
} 
//... 

merci pour votre aide ...

par drfrank » 07 sept. 2006, 11:53

Merci beaucoup Cyrano ! ça fonctionne à merveille. Je pensais mais alors pas du tout à ça...

merci aussi fabien_14.

par Cyrano » 07 sept. 2006, 11:34

en ajoutant un simple élément dans ta boucle, ça serait encore plus simple, proposition:
<?php
//...
/* On crée un point de repère pour détecter les changements de date */
$d = "";
for ($a = 1; $a < $count; $a++)
{
    $data1 = mysql_fetch_array($req);
    $date1 = "".$data1["date"]."";
    $nom1 = "".$data1["nom"]."";
    /* Si la date a changé, on l'affiche */
    if($d != $datefr1)
    {
        /* On assigne la nouvelle date à notre point de repère */
        $d = $datefr1;
        echo $datefr1 ."<br>";
    }
    echo $nom1 ."<br>";
}
//...
?>

par fabien_14 » 07 sept. 2006, 11:31

Salut

J'ai exacetement ce que j'ai voulais faire :)

regarde ici :) >>

http://www.phpfrance.com/forums/voir_sujet-22015.php

regrouper les résultats - boucles imbriquées ?

par drfrank » 07 sept. 2006, 11:16

Bonjour,

voilà j'ai deux tables :
concerts (table 1)
id - date - (...)

groupes (table 2)
id - idconcert - nom - (...)

j'ai un problème pour regrouper les noms des groupes par date. Je voudrais :

JEUDI 12 SEP
groupe 1
groupe 2

VENDREDI 13 SEP
groupe 3
groupe 4


Code : Tout sélectionner

$sql = "SELECT * FROM concerts, groupes WHERE concerts.id= groupes.idconcert AND concerts.afficher=1 AND concerts.date>='$today'ORDER BY concerts.date asc"; $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); $count=mysql_num_rows($req);

for ($a = 1; $a < $count; $a++) {
$data1 = mysql_fetch_array($req);
$date1 = "".$data1["date"]."";
$nom1 = "".$data1["nom"]."";

echo"
$datefr1<br>
$nom1<br>";}
et ça m'affiche

JEUDI 12 SEP
groupe1

JEUDI 12 SEP
groupe 2

VENDREDI 13 SEP
groupe3

VENDREDI 13 SEP
groupe 4


faut-il passer par des requêtes ou des boucles imbriquées ?
Je suis un peu paumé ...