我的表名为 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/