我做了像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...
}
}
答案 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个查询来节省大量的执行时间。