【发布时间】:2018-04-11 17:56:22
【问题描述】:
我有 2 个具有一对多关系的表(用户和位置),每个用户都有一个位置,但位置可能有很多用户。
在users 表中有一个名为location_id 的列与locations 表中名为id 的列相关。
locations.id -> users.location_id.
所以当我想得到所有的 users 和他们的 locations 时,我使用这个代码:
//Select all the users.
$stmt = $pdo->prepare('SELECT *
FROM users
JOIN locations ON users.location_id = locations.id ');
$stmt->execute();
$values = $stmt->fetchAll();
//Loop through the users.
foreach($values as $val){
$userName = $val['name'];
//Get The location_id from users table.
$locationId = $val['location_id'];
//Select the location based on this location_id.
$st = $pdo->prepare('SELECT * from locations WHERE id = :zid');
$st->execute(array('zid' => $locationId));
$v = $st->fetch();
$location = $v['location'];
}
有没有更好的方法来获得相同的结果?
【问题讨论】:
-
您应该在第一个查询中拥有所需的所有数据。我看不出使用第二个查询的意义。
-
@clinomaniac ,如何从第一个查询中得到?
-
SELECT * 表示从所有表中获取所有列
-
你有
SELECT *意味着你正在从用户和位置表中获取所有列。 -
看起来你可以真正做到
SELECT locations.location FROM users JOIN locations ON users.location_id = locations.id并节省各种不必要的数据传输