簡體   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