如何使用2个表正确显示带注释的项目

时间:2013-08-22 13:16:20

标签: php mysql joomla

我做了像facebook墙的东西。我使用2个表来存储信息:#_ post和# _post_comments。 #_ 帖子包含墙贴,# _post_comments包含帖子的评论。

我想知道如何使用2个单独的模型(针对每个查询)或使用连接来显示所有信息。现在我用得非常糟糕,在我看来解决方案:

我为#__post表创建了模型,并使用了类似这样的查询:

SELECT * FROM #__post

然后在模板中我做了这个:

foreach ($posts as $post) {
echo $post->title;
echo $post->text;
echo 'Comments start here';
$comments = "SELECT * #__post_comments WHERE id = $post->id";
foreach ($comments as $comments) {
echo $comments->comment;
etc...
} 
}

1 个答案:

答案 0 :(得分:1)

我会做的不同的是运行一个SQL查询然后在循环中填入数组。 示例(未测试):

$comments = "select * from post_comments 
  join posts on post_comments.post_id = posts.id 
  order by post_comments.id desc, posts.id desc";
foreach ($comments as $comment) {
  if (!$posts[$comment['post_id']]) {
    $posts[$comment['post_id'] = array("post_data" => XXX, "comments" => array(YYY));
  }
}

然后你可能需要做一些排序技巧,但希望你能得到这个想法。 所以最后你应该有一个这样的$ post数组:

$posts = array(
  [0] => array(
    "post_data" => array("title" => "XXX", "create_time" => "YYY"),
    "comments" => array(...)
  ),
  [1] => array(
    "post_data" => array("title" => "XXX", "create_time" => "YYY"),
    "comments" => array(...)
  ),
  /* ... */
);

就PHP而言可能并不漂亮,但您可以使用一个SQL查询而不是N个查询来节省大量的执行时间。