У меня есть две таблицы, в которых есть одно отношение (пользователи и местоположения). У каждого пользователя есть одно местоположение. Но у местоположения может быть много пользователей.
В таблице users
есть столбец с именем location_id
который связан с столбцом с именем id
в таблице locations
.
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'];
}
Есть ли лучший способ получить тот же результат?
это будет делать то же самое, насколько я могу сказать
//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
$location = $val['location'];
}