【问题标题】:How to select specific column from a table that has one to many relationship with another table?如何从与另一个表具有一对多关系的表中选择特定列?
【发布时间】: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 并节省各种不必要的数据传输

标签: php mysql sql pdo


【解决方案1】:

据我所知,这会做同样的事情

//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'];
}

【讨论】:

    猜你喜欢
    • 2015-01-02
    • 1970-01-01
    • 2018-03-14
    • 1970-01-01
    • 2017-01-24
    • 1970-01-01
    • 1970-01-01
    • 2012-06-21
    • 1970-01-01
    相关资源
    最近更新 更多