2013-06-27 3 views
2

J'essaie de créer une archive de nouvelles sur mon site web. je l'ai écrit ce code:créer des archives mensuelles avec PHP et MySQL

$sql_result = $db->query(" 
SELECT *,COUNT(id) AS itemCount 
FROM post 
GROUP BY DATE_FORMAT(date, '%Y-%m') DESC "); 

while ($row = $db->get_row($sql_result)) { 
$datetime = strtotime($row['date']); 
$tday = date("Y-m", $datetime); 
$count = $row['itemCount']; 
echo "Month: {$tday} - News Number: {$count}<br>"; 
} 

Et voici le résultat:

Month: 2013-06 - News Number: 4 
Month: 2013-05 - News Number: 3 
Month: 2013-04 - News Number: 4 
Month: 2013-03 - News Number: 3 

Ma question est, comment je peux montrer de nouvelles dans le titre tous les mois après ce mois? par exemple quelque chose comme ceci:

Month: 2013-06 - News Number: 4 
-news number 1 for this month 
-news number 2 for this month 
-news number 3 for this month 
-news number 4 for this month 
Month: 2013-05 - News Number: 3 
-news number 1 for this month 
-news number 2 for this month 
-news number 3 for this month 
Month: 2013-04 - News Number: 4 
-news number 1 for this month 
-news number 2 for this month 
-news number 3 for this month 
-news number 4 for this month 
Month: 2013-03 - News Number: 3 
-news number 1 for this month 
-news number 2 for this month 
-news number 3 for this month 

Répondre

1

Essayez d'utiliser ce code.

while ($row = $db->get_row($sql_result)) { 
    $datetime = strtotime($row['date']); 
    $tday = date("Y-m", $datetime); 
    $count = $row['itemCount']; 
    echo "Month: {$tday} - News Number: {$count}<br>"; 
    $sql_result1 = $db->query(" 
    SELECT newsTitle 
    FROM post 
    WHERE DATE_FORMAT(date, '%Y-%m')=DATE_FORMAT({$datetime}, '%Y-%m')"); 
    while($row1 = $db->get_row($sql_result1)){ 
    echo "News: {$row1['newsTitle']}"; 
    } 
} 
+0

merci mais ça ne marche pas ... – Alireza

+0

Essayez ceci, ça va fonctionner. Et s'il vous plaît vérifier le nom de la colonne dans la déclaration SQL écrite par moi. –

+0

merci beaucoup mon cher ami. travaille maintenant. – Alireza

0

Vous pouvez ajouter une boucle dans votre boucle while, comme celui-ci;

while ($row = $db->get_row($sql_result)) { 
    $datetime = strtotime($row['date']); 
    $tday = date("Y-m", $datetime); 
    $count = $row['itemCount']; 
    echo "Month: {$tday} - News Number: {$count}<br>"; 

    ///////////////////////// 
    // You can add a sql query here, as you added before while loop, to get each 
    // month's data on the basis of unique-id which you have in '$row' 
    ///////////////////////// 

    for($i=1; $i<=$count; $i++) 
    { 
    echo "-news number {$i} for this month<br>"; 
    } 
} 
+0

merci, mais comment je peux montrer toutes les nouvelles de chaque mois dans cette liste? Je veux dire, comment puis-je obtenir des données de MySQL pour ce mois? – Alireza

+0

J'ai modifié mon code, j'ai ajouté un commentaire, j'espère que vous l'obtiendrez. vous pouvez ajouter une requête sql pour obtenir les données de chaque mois dans la boucle while. – JazyK

0

créer une archive chaque année avec PHP et MySQL

$link = mysqli_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME) or die(mysqli_errno()); 
$s="SELECT *,COUNT(content_id) AS itemCount FROM content_mast GROUP BY DATE_FORMAT(date_upload, '%Y') DESC "; 
$sql_result =mysqli_query($link,$s); 

while ($row = mysqli_fetch_array($sql_result)) 
    { 
    $datetime = strtotime($row['date_upload']); 
    $tday = date("Y", $datetime); 
    $count = $row['itemCount']; 
    echo "Month: {$tday} - News Number: {$count}<br>"; 

    for($i=1; $i<=$count; $i++) 
    { 
    echo "-news number {$i} for this month<br>"; 
    } 
} 

enter image description here

à propos de l'image de sortie.

Sortie

0

test complet Exemple d'archives chaque année avec PHP et MySQL (comme blog)

<link href="CSS/treeview.css" rel="stylesheet" /> 
    <script src="scripts/jquery-1.11.1.min.js"></script> 
    <script> 
     $(function() { 
      //start the tree in an autocollapsed state 
      $('#Decor ul').hide(400); 

      $('#Decor li').on('click', function (e) { 
       e.stopPropagation(); // prevent links from toggling the nodes 
       $(this).children('ul').slideToggle(); 
      }); 

      // This code opens all hyperlinks in a new window 
      // and avoids anchors 
      $('#Decor a').not('[href="#"]').attr('target', '_blank'); 
     }); 
    </script> 
</head> 

<?php 
define("DB_USER",""); 
define("DB_PASS",""); 
define("DB_HOST",""); 
define("DB_NAME",""); 

$link = mysqli_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME) or die(mysqli_errno()); 
$s="SELECT *,content_id,COUNT(content_id) AS itemCount FROM content_mast GROUP BY DATE_FORMAT(date_upload,'%Y') DESC"; 
$sql_result=mysqli_query($link,$s); 
?> 
<ul id="Decor"> 
<?php 
while($row=mysqli_fetch_array($sql_result)) 
    { 

    $datetime=strtotime($row['date_upload']); 
    $tday = date("Y", $datetime); 
    $count = $row['itemCount']; 

    ?> 
    <li class="level1"><?php echo "<u><strong>{$tday} ({$count})</strong></u><br>"; ?> 
    <?php 
     $s1="select * from content_mast where DATE_FORMAT(date_upload,'%Y')=$tday"; 
     $q=mysqli_query($link,$s1); 
     while($month=mysqli_fetch_row($q)) 
     { 
     ?> 
      <ul> 
       <li><a href="#"><?php echo date("M",strtotime($month[5]))."<br>"; ?></a></li> 
      </ul> 
      <?php 


     } 

    echo "<br>"; 

} 
?> 
</ul> 
</html>  
+0

Deux réponses à la même question? S'il vous plaît choisir un :-) Et l'autre réponse a des images, et une sortie qui ne fait rien? S'il-vous-plaît évaluez. – Nic3500

Questions connexes