2010-06-02 3 views
2

J'ai 2 tables: commentaires & postes. Je voudrais afficher une liste de 15 articles et maximum 2 commentaires les plus récents sous chaque entrée de blog en utilisant mysql.requête mysql - billets de blog et commentaires avec limite

le schéma de base de données se présente comme suit

posts_table: 
post_id, post_txt, post_timestamp 

comments_table: 
post_id, comment_txt, comment_timestamp 

comment devrait l'apparence de requête MySQL afin de sélectionner 15 postes et leurs commentaires connexes (max 2 les plus récentes par poste)?

grâce

Répondre

1

MySQL LIMIT

SELECT * FROM posts_table LIMIT 0, 15 

Et pour tirer les commentaires les plus récents:

SELECT * FROM comments_table ORDER BY comment_timestamp DESC LIMIT 0, 2 

Je vais laisser à vous joindre les deux requêtes ensemble en quelque sorte ...

-1

Tout d'abord je voudrais sélectionner les postes comme

$resource = mysql_query('SELECT * FROM posts LIMIT 0,10'); //your own query in place here to get posts 

    $posts = array(); 
    while($row = mysql_fetch_assoc($resource)) 
    { 
     $query = sprintf('SELECT * FROM comments WHERE post_id = %d',$row['post_id']); 
     $comments = mysql_query($query); 
     while($row2 = mysql_fetch_assoc($comments)) 
     { 
      $row['comments'] = $row2; 
     } 
     $posts[] = $row; 
    } 

Ensuite, dans votre modèle/vue

foreach($posts as $post) 
{ 
    //Print out your main posts data here. 
    foreach($post['comments'] as $comment) 
    { 
     //Print out your comments here! 
    } 
} 

Hope this helps

+0

Ne jamais exécuter une requête dans la boucle. Ce n'est pas une bonne pratique. Que faire si vous avez 10000 commentaires à un article? –

Questions connexes