Как получить правильный столбец после объединения с помощью PDO? - PullRequest
0 голосов
/ 03 октября 2011

У меня есть две таблицы 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

Когда я выполняю LEFT JOIN для двух таблиц с помощью PDO PHP, я делаю следующее:

$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();

Мой вопрос: как я могу различить поле id, связанное с таблицей Cat, и id, связанное с таблицей Cheezburger?$cat['id'] дает мне поле Cheezburger id.

Ответы [ 3 ]

3 голосов
/ 03 октября 2011

Часто не рекомендуется 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 * состоит в том, что если вы добавите позже столбцы, которые не нужны в этой конкретной части вашего приложения, вы не будете использовать дополнительную память на сервере базы данных для извлечения ненужныхданные и загрузить его в веб-приложение, где он не будет использоваться.Если вам случится добавить двоичный столбец BLOB позже, вы можете без необходимости извлекать гораздо больше данных.

Другая причина - та, которую вы обнаружили.Вы можете предложить двусмысленность в именах столбцов.

0 голосов
/ 03 октября 2011

Вам нужно будет перечислить поля и перечислить их, чтобы это было похоже на

SELECT cat.id as catId, cat.name, cheezburger.id as cheezId ...
0 голосов
/ 03 октября 2011

Избегайте «ленивых» * и укажите поля, которые вы хотите явно:

SELECT cat.ID AS catID, Cheezeburger.id AS icanhaz ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...