Probleme de classement par catégories

RenaudMa.
Invité n'ayant pas de compte PHPfrance

21 mars 2012, 15:47

Bonjour à tous !

Je suis débutant en php et j'ai une petite question pour vous !

Pour la page d'accueil d'un site, j'ai réussi a afficher les 5 derniers articles du site, cependant je voudrais améliorer la chose et afficher chaque catégories sous forme de colonne :

La colonne commencerait par le nom de la catégorie puis les 5 derniers articles de cette même catégorie !

J'ai pour l'instant afficher la chose sous forme de 3 colonnes contenant chacunes les 5 mêmes articles ..

J'ai 2 bases de données :

CONTENU avec id id_categorie titre description texte

CATEGORIES avec id nom_categorie description_categorie


Merci beaucoup !

Voila mon code :

<?php
//On se connecte à la base de données 
include('connexion_bd.php'); 
 
mysql_connect("$nom_du_serveur","$nom_utilisateur","$passe"); 
mysql_select_db("$nom_de_la_base") or die('Impossible de s&eacute;lectionner une base de donn&eacute;e. Assurez vous d\'avoir correctement remplit les donn&eacute;es du fichier connexion_bd.php.');
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="fr-fr">
<head>
 
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
<title>baa</title> 
<meta name="Description" content="" /> 
<link href="style.css" rel="stylesheet" type="text/css" /> 
<link rel="icon" type="shortcut icon" href="/images/favicon.ico" />
 
</head> 
 
<body> 
<!-- <img src="/images/back1.jpg" id="bg" alt="">-->
<div class="conteneur"> 
 
<?php include('menu.php');?> 
 
<div class="cadrecontenu"> 
 <div class="head"></div>
 <div class="contenu">
 
 
 <div class="colonne">
<h1>Colonne 1</h1>
 
<?php
//On selectionne les 5 dernières entrées 
$result1 = mysql_query("SELECT id,titre,description FROM CONTENU ORDER BY id ASC LIMIT 5");
while($affiche = mysql_fetch_array($result1)){ 
echo '<div class="cadre"><h2><a title="'.$affiche['titre'].'" href="page.php?id='.$affiche['id'].'">'.$affiche['titre'].'</a></h2> '.nl2br($affiche['description']).' </div>'; 
} 
?> 
</div>
<div class="colonne">
<h1>Colonne 2</h1>
 
<?php
//On selectionne les 5 dernières entrées 
$result1 = mysql_query("SELECT id,titre,description FROM CONTENU ORDER BY id ASC LIMIT 5");
while($affiche = mysql_fetch_array($result1)){ 
echo '<div class="cadre"><h2><a title="'.$affiche['titre'].'" href="page.php?id='.$affiche['id'].'">'.$affiche['titre'].'</a></h2> '.nl2br($affiche['description']).' </div>'; 
} 
?> 
</div>
<div class="colonne">
<h1>Colonne 3</h1>
 
<?php
//On selectionne les 5 dernières entrées 
$result1 = mysql_query("SELECT id,titre,description FROM CONTENU ORDER BY id ASC LIMIT 5");
while($affiche = mysql_fetch_array($result1)){ 
echo '<div class="cadre"><h2><a title="'.$affiche['titre'].'" href="page.php?id='.$affiche['id'].'">'.$affiche['titre'].'</a></h2> '.nl2br($affiche['description']).' </div>'; 
} 
?> 
</div>
</div>
<?php include('footer.php');?> 
</div> 
 

 
</div> 
 <script src="jquery.js"></script>

<script src="mon_jquery.js"></script>
</body>  
</html> 

ViPHP
ViPHP | 2577 Messages

21 mars 2012, 16:54

regarde sql-bases-donnees/mysql-agregation-maximum-t263270.html
On y parle d'un problème semblable.

Attention, sur une page d'accueil, ca risque d'être gourmand en ressource.

RenaudM.
Invité n'ayant pas de compte PHPfrance

21 mars 2012, 17:23

Merci ! J'ai jeté un coup d'oeil, mais je t'avouerais que j'ai du mal à adapter les réponses à mon problème ..

J'ai reposté mon sujet dans la partie Mysql , c'est vrai que c'est plus adapté !

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

21 mars 2012, 17:49

Il faut 2 requêtes, la première liste les catégories pour construire les div colonnes et la deuxième liste les 5 derniers contenus pour chaque catégorie. Donc 2 boucles While imbriquées.
<?php
//On selectionne les categories
$result1 = mysql_query("SELECT * FROM CATEGORIES ORDER BY nom_categorie");
while($cat = mysql_fetch_array($result1)){
    // debut du div categorie 
    echo '<div class="colonne"><h1>'.$cat['nom_categorie'].'</h1>';

    //On selectionne les 5 derniers contenus de la categorie en cours
    $result2 = mysql_query("SELECT * FROM CONTENU WHERE id_categorie='".$cat['id']."' ORDER BY id ASC LIMIT 5");
    while($contenu = mysql_fetch_array($result2)){
        echo '<div class="cadre"><h2><a title="'.$contenu['titre'].'" href="page.php?id='.$contenu['id'].'">'.$contenu['titre'].'</a></h2> '.nl2br($contenu['description']).' </div>';
    }//fin while $contenu
    
    // fin du div categorie
    echo '</div>';
} //fin while $cat
?>
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

RenaudM.
Invité n'ayant pas de compte PHPfrance

21 mars 2012, 18:10

Ah ! :D

Merci beaucoup ! Sa fonctionne à merveille ! :D

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

22 mars 2012, 20:50

Bonsoir, Si c'est résolu il faut le marquer. :wink:
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène