mysql - 获取多个表数据而不损失性能?

标签 mysql performance

我的表名为 cars ,第二个表名为 uploads ,它有一个 car_id 字段,我可以LEFT JOIN 这样,那么uploads.car_id = cars.id,问题就来了,而uploads表中,对于某个car id有多个记录,那怎么办?我必须像这样循环使用第二个查询?

$cars = $PDO->query("SELECT * FROM `cars`")->fetchAll();
foreach($cars as $car)
{
    $uploads = $PDO->query("SELECT * from uploads WHERE id = " . (int)$car['id'])->fetch();
    echo 'My upload file name:' . $uploads['hash'];
}

?这不是一个好主意,因为 $cars 查询可能会一次返回超过 500 条记录...因此这将是巨大的性能损失。

所以我的问题是,在这种情况下我该怎么做才能防止循环中的查询?

最佳答案

您可以使用 GROUP BY 和 GROUB_CONCAT sql 函数在一个查询中获得您想要的结果,并且性能更好

尝试:

$cars = $PDO->query("SELECT cars.id as carID, GROUP_CONCAT(hash) AS hashs FROM uploads left join cars on uploads.car_id = cars.id group by cars.id ")->fetchAll();

foreach($cars as $car)
{
   echo 'Car id '.$car['carID'].'  --  uploaded files name:' . $uploads['hashs'];
}

关于mysql - 获取多个表数据而不损失性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13368758/

相关文章:

PHP/MySQL - 从数据库中获取一行

php - 通过php在mysql中用空值更新日期时间

MySQL GROUP BY WITH ROLLUP - 想要 ROLLUP 所有排列

php - 为什么我的 Python 代码比 PHP 中的相同代码慢 100 倍?

C# - ADO.NET 的一些高性能最佳实践/技巧是什么

python - 包装 np.arrays __pow__ 方法

php - Laravel 跟踪一行中的单个单元格

python - 导入模块 flask.ext.mysqldb 时出错

performance - 有没有办法加快 R 中的库加载?

python - 如何在 python 中对运行 fuzzywuzzy 字符串匹配逻辑的 2m 行进行多重处理?当前的代码非常慢