PHP   发布时间:2022-04-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了php-使用MYSQL列出具有最新注释/活动的类别大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

我正在开发一个网站,用户可以在其中发布评论,并对每个评论进行分类.我有一个页面,用户可以在其中浏览网站上所有类别的列表,并在其中发布最新的5条评论.

我需要从数据库检索的信息是:

>类别列表

>每个类别中有5条评论

这就是我现在所拥有的(简化为基本的PHP):

echo "<ul>";
$query = MysqL_query("SELECT * FROM categories");
while($result = MysqL_fetch_assoc($query)){

    echo "<li><h2>{$result['category_name']}</h2>";

    $query_comments = MysqL_query(
                                 "SELECT * FROM comments WHERE ".
                                 "category_id = '{$result['id']}' ".
                                 "ORDER BY created_at DESC LIMIT 5");
    while($result_comments = MysqL_fetch_assoc($query_comments)){
        echo "{$result_comments['username']} wrote {$result_comments['text']} on {$result_comments['created_at']}<br>";
    }

    echo "</li>";

}
echo "</ul>";

看起来像这样(假设我的类别是“水果”名称)

Apple
    Jay wrote blah blah blah - August 5, 2009
    Bob wrote hello hello hello - August 5, 2009
    Tom wrote super super - August 5, 2009
    Edward wrote no no no - August 5, 2009
    Kaysie wrote super no! - August 5, 2009

Orange
    Cassie wrote ye ye ye ye - August 5, 2009
    Alfonce wrote whoohoo - August 5, 2009
    Arthur wrote love oranges - August 5, 2009
    Alice wrote yes yes yes - August 5, 2009
    Xavier wrote Lorem ipsum dolor sit amet - August 5, 2009

StrawBerry
    Chris wrote Lorem ipsum dolor sit amet - August 5, 2009
    Hubert wrote Lorem ipsum dolor sit amet - August 5, 2009
    Martin wrote Lorem ipsum dolor sit amet - August 5, 2009
    Lyon wrote Lorem ipsum dolor sit amet - August 5, 2009
    Paris wrote Lorem ipsum dolor sit amet - August 5, 2009

BlueBerry
    etc...

问题是,如果类别很多,我将遇到性能问题,尤其是如果有很多使用该网站的用户.

我正在努力寻找减少所需查询量的方法.有谁知道我该怎么做?

更新,我尝试将类别表与评论表一起加入,但是,我没有找到一种方法来限制每个类别的评论数量,因为如果我使用LIMIT 5,它只会限制返回的评论数量.

解决方法:

我和一个数据库专家谈过,事实证明在MysqL中有点痛苦.

这样的事情在Postgresql中会很好地工作:

SELECT * FROM categories
LEFT JOIN comments ON categories.id = comments.category_id
WHERE comments.id IS NULL OR
comments.id IN ( SELECT id FROM comments AS a2 WHERE categories.id = a2.category_id ORDER BY id DESC LIMIT 5 )

不幸的是,MysqL在子查询不支持LIMIT.他挠了挠头,说有一个解决方法,但是听起来不太好.到那时,我认为您也可以使用多个查询.如果是性能问题,则可能是您临时缓存的数据.

对不起,帮不上忙:)

错误的旧答案:尝试在查询中使用LEFT JOIN,左侧带有类别(因此,无论是否有注释,所有类别都会被返回),而右侧是注释表.这会将其简化为一个查询.

大佬总结

以上是大佬教程为你收集整理的php-使用MYSQL列出具有最新注释/活动的类别全部内容,希望文章能够帮你解决php-使用MYSQL列出具有最新注释/活动的类别所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: