我尝试在两个表之间进行简单的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'],我需要替代它。
非常感谢。
答案 0 :(得分:1)
您必须从一个表或另一个表中为id
列指定列别名,以使列名不同。
这意味着您无法使用“SELECT *
”,您必须拼出所有要从该表中获取的列名称。如果您希望所有这些列没有别名,至少您仍然可以查询category.*
。
顺便说一下,这类问题是避免在每个表中使用“id
”这样的通用名称作为主键的一个很好的理由。而是使用更具描述性的名称,例如product_id
和category_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);