gpt4 book ai didi

php - 使用 MYSQL 列出具有最新评论/事件的类别

转载 作者:可可西里 更新时间:2023-11-01 08:08:32 27 4
gpt4 key购买 nike

我正在开发一个网站,用户可以在其中发表评论并且对每条评论进行分类。我有一个页面,用户可以在其中查看网站上所有类别的列表,其中包含最新的 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, 2009Orange    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, 2009Strawberry    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, 2009Blueberry    etc...

问题是,如果有很多类别,我会遇到性能问题,尤其是当有很多用户使用该网站时。

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

UPDATE 我尝试用 LEFT JOIN 类别表和评论表,但是我没有找到限制每个类别评论数量的方法,因为如果我使用 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 列出具有最新评论/事件的类别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1232556/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com