Php pdo результат запроса JOIN

моя проблема

Я пытаюсь сделать простое СОЕДИНЕНИЕ между двумя таблицами, обе из которых имеют поле id. Мой результат — объект stdClass, так как я использую PDO. Кто-нибудь знает, как я могу отличить идентификатор первой таблицы от идентификатора второй таблицы?

Код

$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. Если бы это был массив, я мог бы использовать $products['p.id'] , мне нужна альтернатива этому.

Большое спасибо.


person BebliucGeorge    schedule 04.09.2009    source источник


Ответы (2)


Вы должны указать псевдоним столбца для столбца id из той или иной таблицы, чтобы сделать имена столбцов разными.

Это означает, что вы не можете использовать "SELECT *", вы должны указать по буквам все имена столбцов, которые вы хотите получить из этой таблицы. По крайней мере, вы все равно можете запросить category.*, если вам нужны все эти столбцы без псевдонимов.

Кстати, такого рода проблемы — хорошая причина избегать использования общего имени, такого как «id», для вашего первичного ключа в каждой таблице. Вместо этого используйте более описательные имена, такие как product_id и category_id. Тогда у вас не будет проблемы с конфликтующими именами столбцов.

person Bill Karwin    schedule 04.09.2009
comment
Я исследовал это на веб-сайте mysql, но мне это не понравилось, потому что в моей таблице продуктов много столбцов. Спасибо за Ваш ответ. - person BebliucGeorge; 04.09.2009
comment
Итак, выберите p.* и псевдоним столбца id из другой таблицы. - person Bill Karwin; 04.09.2009
comment
Это до н.э. ВЫБЕРИТЕ p.*, c.id КАК category_id, c.name ИЗ продуктов КАК p, products_categories как c ГДЕ c.id = p.category Worked . Спасибо. Я нашел это: us2.php.net/manual/en/pdostatement.fetchall. php . Поэтому, когда я использую JOINS, я могу вернуть его как массив. - person BebliucGeorge; 04.09.2009

я использовал

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

Это работало с PDO, используя fetch(PDO::FETCH_ASSOC)

person Laura    schedule 29.08.2012