JOP查询的Php pdo结果

时间:2009-09-04 17:57:50

标签: php sql join object pdo

我的问题是

我尝试在两个表之间进行简单的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'],我需要替代它。

非常感谢。

3 个答案:

答案 0 :(得分:1)

您必须从一个表或另一个表中为id列指定列别名,以使列名不同。

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

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

答案 1 :(得分:0)

我用过

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

这与PDO一起使用fetch(PDO::FETCH_ASSOC)

答案 2 :(得分:0)

$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);