我正在尝试做的是:我正在尝试为我的网站构建评论和回复系统。我已经有了这个工作,但我正在做的方式可能不是最好的性能。
我想从包含评论的表格中选择 10 行,然后我想从另一个表格中选择另外 2 行,该表格包含每个评论的回复。我通过在 PHP 上循环来为每个评论从另一个表中选择 2 个回复来做到这一点。或多或少是这样的:
$comments = $MySQL->fetchRows("SELECT id, text FROM comments LIMIT 10");
foreach($comments as $i => $c) {
$comments[$i]["replies"] = $MySQL->fetchRows("SELECT id, text FROM replies WHERE comment_id = $c['id'] LIMIT 2");
}
就像我说的,我确信这不是最好的方法,因为它需要多次调用数据库。在使用 MySQL 的单个查询中是否有更好的方法来执行此操作?
答案 0 :(得分:0)
我经常在一个网页上有 40 个经过良好调整的查询。还不错。
另一方面,JOINs
、UNIONs
、存储过程等可以减少到服务器的往返次数。
注意事项:
没有 LIMIT
的 ORDER BY
没有多大意义。
可以使用 JOIN
和“派生表”组合您拥有的两个查询。
SELECT c.text, r.text
FROM ( SELECT id, text FROM comments
WHERE ...
ORDER BY ...
LIMIT 10 ) AS c
JOIN replies AS r
ON r.id = c.id -- Really the same id??
这将找到来自大约 10 个“评论”的所有回复。
对两者都设置限制变得更加棘手。