Affichage des données par ordre choisi

Mammouth du PHP | 620 Messages

19 févr. 2009, 13:37

bonjour,
j'ai créé une galerie photos sur mon site internet. Pour le moment l'affichage des photos se fait de tel sorte que tout apparait mélanger.
Ma table est faite de la sorte : type (pour type de la photo), photo, nom (pour nommé la photo).

j'ai donc toutes mes photos qui s'affichent les unes derriere les autre et jaimerai les classé en fonction du type de la photo. (dans type j'ai paysages, lacs, montagnes...)
ma requete actuelle est :
$limit_str = "LIMIT ". $page * $limit .",$limit"; 
$req = mysql_query("SELECT * FROM galerie ORDER BY id DESC $limit_str"); 
while($data = mysql_fetch_array($req)) 
	{ 
je souahiterai que mes photos s'affichent donc par type (ok order by type) mais que lorsque l'on change de type on ai une séparation entre les photos et que l'on affiche le type.

Wouha !!! vous avez compris ?

exemple :

Type montagnes :
photo1, photo2, photo3, photo, photo5, photo6,....

----separation----

Type lacs:
photo1, photo2, photo3, photo, photo5, photo6,....

merci pour votre aide

Eléphant du PHP | 145 Messages

19 févr. 2009, 14:23

Bonjour,

Mysql_fetch_array(); va parcourir ton recordset occurrence après occurrence donc même si tu fais un tri par type, il ne te fera aucune séparation.

La meilleur solution pour séparé est que tu fasse une requête pour chaque type et que tu fasse toi même la séparation entre chaque type.

De même que j'ai remarqué ton Limite, veux tu sélectionner un nombre précis d'image?
Si non, mysql_fetch_array va s'arréter tout seul lorsqu'il aura atteint la dernière occurrence.
$req = mysql_query("SELECT * FROM galerie WHERE type = 'Montagne' ORDER BY id DESC"); 
while($data = mysql_fetch_array($req)) 
    {
...
     }
echo '<hr />';
$req = mysql_query("SELECT * FROM galerie WHERE type = 'Lac' ORDER BY id DESC"); 
while($data = mysql_fetch_array($req)) 
    {
...
     }
...

En espérant de t'avoir aider :)

Albat90 ;)
La culture, c'est comme la confiture, moins on en a, plus on l'étale.

Eléphant du PHP | 70 Messages

19 févr. 2009, 14:38

Par contre, si il ne connais pas tout les types, cette solution ne conviendra pas.

Si jamais tu ne connais pas tout les types avant l'éxécution, tu peux sauvegarder le type actuelle dans une variable frigo.
A chaque ligne d'enregistrement, tu compares le type actuel avec celui de l'enregistrement précédent.
$type = "Montagne";
$req = mysql_query("SELECT * FROM galerie ORDER BY type DESC");  
while($data = mysql_fetch_array($req))  
{ 
     if($data["type"] != $type) echo "<hr/>";
     $type = $data["type"];
}
Cette solution est plus compliquée que la précédente, d'autant plus qu'il faut vérifier que le test ne s'effectue pas sur la première ligne.
Si tu connais tout les types à l'avance, la solution de Albat90 sera normalement plus performante.

Mammouth du PHP | 620 Messages

19 févr. 2009, 14:57

merci pour vos conseils. j'ai finalement réussi a adapté ma requete et sa fonctionne.
$req = mysql_query("SELECT * FROM galerie ORDER BY type");  
$type_en_cours = '';
while($data = mysql_fetch_array($req))  
    { 

if($type_en_cours != $data['type']) { // Nouveau type...
           $type_en_cours = $data['type'];
           echo '<h3>Type : '.$type_en_cours."</h3>\n";
       }

echo'
<a href="../images/galerie/', $data['photoref'] ,'" target="_blank">
<img src="mini-galerie.php?f=' , $data['photoref'] , '" alt="', $data['alt'] ,'" width="148" height="105"/>
</a>
<br/>
Réf : ', $data['ref'] ,' 
';

Eléphant du PHP | 145 Messages

19 févr. 2009, 15:56

Oui, c'est très bien comme ça :)
Donc je pense que maintenant tu peux mettre [RÉSOLU] :D

Albat90 ;)
La culture, c'est comme la confiture, moins on en a, plus on l'étale.