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)


arrow_upward
1
arrow_downward

Вы должны указать псевдоним столбца для столбца 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

arrow_upward
0
arrow_downward

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

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