IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Afficher x résultats par catégorie [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2007
    Messages : 17
    Par défaut Afficher x résultats par catégorie
    Bonjour,

    Je serais très reconnaissant à la personne qui veut bien m'aider car je n'y parviens vraiment pas seul.

    Préambule:

    J'ai une base de données qui contient des images (ou plutôt des adresses d'images). Chaque photo est associée à un pays.

    J'ai une galerie flash qui doit être alimentée par un fichier XML.
    Je génère ce fichier XML dynamiquement, en PHP, à partir des images contenus dans ma BDD.

    Ce fichier XML se présente ainsi (en simplifié):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <?xml version="1.0" encoding="utf-8" ?> 
    <gallery>
    	<album name="country1">
    		<image src="xxy.jpg" />
    		<image src="yxx.jpg" />
    	</album>
    	<album name="country2">
    		<image src="xyy.jpg" />
    		<image src="yxx.jpg" />
    	</album>
    	<album name="country3">
    		<image src="zzz.jpg" />
    		<image src="zzx.jpg" />
    	</album>
    </gallery>
    Après pas mal de galère, je suis parvenu à créer le script qui puisse générer ce fichier (qui contient en réalité plus d'infos mais je simplifie au maximum).

    Le voici (encore une fois c'est simplifié au maximum):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    <? //Génération du fichier gallery.xml
    $fichier1 = 'gallery.xml';
    $fp1 = fopen($fichier1, "w");
    $book1 = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n";
    $book1 .= "<gallery>\n";
     
    // Ci-dessous, je vais chercher dans ma base les photos à afficher
    $tmp1 = mysql_query("SELECT id, country, pic1 FROM ".C_MYSQL_MEMBERS." order by country ASC");
     
    while($i=mysql_fetch_array($tmp1))
     {
     
    if(!isset($cat)) // Nouvelle utilisation: On va donc créer un premier album
       {
     
        $book1 .= "\t   <album name=\"".$i['country']."\">\n";
        $book1 .= "\t\t  <image src=\"".$i['pic1']."\" />\n"; //On liste les photos de cet album (=de ce pays)
        $cat = $i['country']; //On attribue une valeur a $cat pour que celui ne soit plus vide
       }
     
    elseif ($i['country'] == $cat) // On doit donc rester dans le même album car le pays n'a pas changé
       {
        $book1 .= "\t\t  <image src=\"".$i['pic1']."\" />\n";
       }
     
    else // On arrive à une photo qui se trouve dans un nouveau pays.
       {
        $book1 .= "\t   </album>\n"; // On ferme donc l'album précédent...
        $book1 .= "\t   <album name=\"".$i['country']."\">\n"; // ...et on en crée un nouveau
        $book1 .= "\t\t  <image src=\"".$i['pic1']."\" />\n";
        $cat = $i['country'];
       }
     
     }
    $book1 .= "\t</album>\n";
    // Et on clôt le fichier xml...
    $book1 .= "</gallery>\n";
    fwrite($fp1, $book1);
    fclose($fp1);
    ?>
    J'obtiens donc une galerie photos divisée en plusieurs albums - chaun d'entre eux étant un pays différent (country). Alors, puisque ça marche, me direz-vous, quel est le problème?

    Le problème, c'est que dans certains pays, il y a plusieurs centaines de photos et que, dans ces pays-là, ça fait un peu planter l'animation flash lorsqu'on les ouvre. J'aimerais donc que dès qu'on atteint un certain nombre de photos dans un pays (disons 200), on crée automatiquement un nouvel album qui s'appellerait NOMDUPAYS-2, NOMDUPAYS-3, NOMDUPAYS-4, etc. Un peu comme lorsqu'on veut afficher seulement 20 résultats par page et qu'il faut passer à la page suivante pour afficher les 20 suivants.

    Franchement, cela me dépasse... J'ai essayé des choses mais ça ne mène à rien. Qui saurait m'aider à modifier mon code PHP pour y parvenir?

    Mille fois merci de m'avoir lu jusqu'ici.

    Lorange

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 138
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 138
    Par défaut
    fait sur l'instant, si tu as des erreurs, n'hésite pas .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    <?php //Génération du fichier gallery.xml
    $fichier1 = 'gallery.xml';
    $fp1 = fopen($fichier1, "w");
    $book1 = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n";
    $book1 .= "<gallery>\n";
    //on définit la limite d'images par pays
    $limit_pic=200;
    //On recupere tous les pays de manière unique
    $requete_pays="select distinct(country) from ".C_MYSQL_MEMBERS." order by country asc";
    $exe=mysql_query($requete_pays);
    if($exe){
      while($pays=mysql_fetch_assoc($exe)){
          //on initialise les variables
          $nb_gal=0;
          //pour chaque pays, on recherche les images
          $requete="select pic1 from  ".C_MYSQL_MEMBERS." where country='".$pays[country]."'";
          $axe=mysql_query($requete);
          //on recupere le nombre de photo pour le pays concerné
          $nb=mysql_num_rows($axe);
          //on calcule le nombre de "galleries nécessaires"
          $nb_gal=ceil($nb/$limit_pic);
          $compteur=0;
          //on boucle
          while ($compteur<$nb_gal){
                //si c'est la premiere galerie on garde le nom du pays
                if($compteur==0){
                $book1 .= "\t   <album name=\"".$i['country']."\">\n";
                }else
                {
                  //sinon on fait nom du pays+$compteur+2
                  $book1 .= "\t   <album name=\"".$i['country']."-".($compteur+2)."\">\n";
                }
     
                //maintenant on recherche les images
                //on définit les limites de la requete
                $limit_deb=$compteur*$limit_pic;
                $requete="select pic1 from  ".C_MYSQL_MEMBERS." where country='".$pays[country]."' limit ".$limit_deb.",".$limit_pic;
                $ixe=mysql_query($requete);
                if($ixe){
                  while($img=mysql_fetch_assoc($ixe)){
                     $book1 .= "\t\t  <image src=\"".$img['pic1']."\" />\n";
                  }
                }
                $book1 .= "\t   </album>\n";
                $compteur++;
          }
      }
    }
    // Et on clôt le fichier xml...
    $book1 .= "</gallery>\n";
    fwrite($fp1, $book1);
    fclose($fp1);
    ?>

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2007
    Messages : 17
    Par défaut
    Raideman...

    Merci beaucoup!

    Ca marche!

    ET en plus, le code a l'air encore plus propre qu'avant

    J'ai simplement remplacé les "$i['country']" par "$pays['country']" et "($compteur+2)" par "($compteur+1)".

    Sincèrement, merci!
    Je n'y serais JAMAIS arrivé seul.

    Passe une très belle journée!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Requête pour afficher les résultats par lot
    Par devalender dans le forum SQL
    Réponses: 4
    Dernier message: 26/10/2011, 15h26
  2. MYSQL PB pour afficher 10 informations par catégorie
    Par Elisisql dans le forum Requêtes
    Réponses: 9
    Dernier message: 07/09/2011, 15h48
  3. afficher les résultats par groupe avec code igniter
    Par rheritahiana dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 04/04/2011, 11h02
  4. [SQL] Afficher X résultats par page ! (LIMIT)
    Par CaLeDo dans le forum PHP & Base de données
    Réponses: 16
    Dernier message: 13/08/2007, 23h21
  5. requète les 5 meilleurs résultats par catégorie
    Par Samcool dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 27/07/2007, 09h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo