0

我制作了类似 facebook 墙的东西。我使用 2 个表来存储信息:#_ post 和#_post_comments。#_ post 包含墙帖,# _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...
} 
}
4

1 回答 1

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 个查询来节省大量的执行时间。

于 2013-08-22T13:42:02.370 回答