根据每行的值选择其他行

时间:2021-07-17 19:50:03

标签: php mysql

我正在尝试做的是:我正在尝试为我的网站构建评论和回复系统。我已经有了这个工作,但我正在做的方式可能不是最好的性能。

我想从包含评论的表格中选择 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 的单个查询中是否有更好的方法来执行此操作?

1 个答案:

答案 0 :(得分:0)

我经常在一个网页上有 40 个经过良好调整的查询。还不错。

另一方面,JOINsUNIONs、存储过程等可以减少到服务器的往返次数。

注意事项:

  • 没有 LIMITORDER 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 个“评论”的所有回复。

对两者都设置限制变得更加棘手。

相关问题