【问题标题】:Php pdo result of JOIN queryJOIN查询的php pdo结果
【发布时间】:2010-11-25 17:25:32
【问题描述】:

我的问题是

我尝试在两个表之间进行简单的 JOIN,这两个表都有 id 字段。我的结果是一个 stdClass 对象,因为我使用 PDO。有谁知道如何区分第一个表的 id 和第二个表的 id?

代码

$sql = "SELECT * FROM products AS p 
        products_categories AS c 
        WHERE c.id = p.category";

$stmt = $connection->prepare($sql);
$stmt->execute();

$products = array();

while($product = $stmt->fetchObject())
    $products[] = $product;

return $products;

如果我尝试使用 $products->id,它将显示 category 表的 id。如果它是一个数组,我可以使用 $products['p.id'] ,我需要一个替代方法。

非常感谢。

【问题讨论】:

    标签: php sql join object pdo


    【解决方案1】:

    您必须为一个或另一个表中的id 列提供一个列别名,以使列名不同。

    这意味着您不能使用“SELECT *”,您必须拼出所有要从该表中获取的列名。如果您希望所有这些列没有别名,至少您仍然可以查询category.*

    顺便说一句,这类问题是避免在每个表中为您的主键使用诸如“id”之类的通用名称的一个很好的理由。而是使用更具描述性的名称,例如 product_idcategory_id。那么你就不会有列名冲突的问题了。

    【讨论】:

    • 我在 mysql 网站上研究过这个,但我不喜欢它,因为我的 products 表有很多列。谢谢你的回答。
    • 所以从另一个表中获取p.* 和别名id 列。
    • 这个公元前。 SELECT p.*, c.id AS category_id, c.name FROM products AS p, products_categories as c WHERE c.id = p.category Worked 。谢谢。我发现了这个:us2.php.net/manual/en/pdostatement.fetchall.php。因此,当我使用 JOINS 时,我可以将其作为数组返回。
    【解决方案2】:

    我用过

    select 
        clientes.nombre AS cn, 
        proyectos.nombre AS pn 
    FROM 
        proyectos 
            LEFT JOIN clientes 
                ON proyectos.clienteId = clientes.id
    

    这适用于使用 fetch(PDO::FETCH_ASSOC) 的 PDO

    【讨论】:

      【解决方案3】:
      $stmt = $db->prepare("SELECT c.car_id, c.car_name, d.dealers_name,m.maker_name
      FROM car_details AS c, dealer_details AS d,maker_details AS m
      WHERE c.dealer_id=d.dealer_id AND c.maker_id=m.maker_id");
      
      $stmt->execute();
      $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
      
      echo '<pre>';
      print_r($rows);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-03-08
        • 2015-05-09
        • 1970-01-01
        • 1970-01-01
        • 2017-12-24
        • 2019-03-23
        • 2017-05-27
        • 1970-01-01
        相关资源
        最近更新 更多