繁体   English   中英

使用PDO进行联接后,如何获得正确的列?

[英]How can I get the right column after a join using PDO?

我有两个如下的MySql表:

Cat
------
id : INT NOT NULL PRIMARY KEY
name : VARCHAR(32)

Cheezburger
-------
id : INT NOT NULL PRIMARY KEY
catId : INT FOREIGN KEY REFERENCES Cat (id)
pattyCount : INT

当我使用PHP的PDO在两个表上执行LEFT JOIN时,我将执行以下操作:

$database = new PDO("mysql:host=$hostname;dbname=$dbname", $username, $pasword);
$query = $database->prepare('
    SELECT * FROM Cat
    LEFT JOIN Cheezebuger.id ON Cheezburger.catId = cat.id
    WHERE Cat.id = ?');
$query->bindParam(1, $someId);
$query->execute();
$cat = $query-fetch();

我的问题是,如何区分与Cat表关联的id字段和与Cheezburger表关联的id $cat['id']给我Cheezburger id字段。

SELECT *通常是不建议的。 相反,请明确说明所需的列,并为别名列分配别名:

SELECT
  Cat.id AS catid,
  Cat.name AS name,
  Cheezeburger.id AS chzid,
  ...
FROM 
  Cat LEFT JOIN Cheezebuger.id ON Cheezburger.catId = cat.id
WHERE Cat.id = ?

现在,要获取Cat.id ,请使用$cat['catid']并要获取Cheezeburger.id ,请使用$cat['chzid']

反对执行SELECT *一个重要原因是,如果以后添加更多的列,而这在应用程序的此特定部分中是不需要的,则不会在数据库服务器上使用额外的内存来检索不需要的数据并将其提取到Web应用程序中不会被使用的地方 如果稍后碰巧添加了二进制BLOB列,则可能会不必要地获取更多数据。

另一个原因是您发现的原因。 您可以在列名中引起歧义。

避免使用'lazy' *并明确指定您想要的字段:

SELECT cat.ID AS catID, Cheezeburger.id AS icanhaz ...

您将需要枚举字段,并将其列出,所以就像

SELECT cat.id as catId, cat.name, cheezburger.id as cheezId ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM