MySQL включается, как вывести отношение "правильным образом" - PullRequest
0 голосов
/ 09 июля 2009

Прежде всего, извините за плохое название темы. Я просто понятия не имею, как сформулировать этот вопрос или что гуглить, так что не стреляйте в меня, если это что-то несложное.

Предположим, у меня есть следующие таблицы:

[АВТОРЫ] id, имя

[NEWS] id, item, author_id

Если бы я хотел отобразить новость и вывести соответствующего автора (сохраненного в author_id), я бы сделал следующий запрос:

SELECT * FROM `news` JOIN `authors` ON news.author_id = authors.id

А затем вывести его, выполнив что-то вроде этого

$Q = "SELECT * FROM news JOIN authors ON news.author_id=news.id";

$query = $this->lite->query($Q) or die($this->lite->error); 

$result=null; while($obj = $query->fetch_object()){
        $result.= '<li>'.$obj->item. 'by ' . $obj->name . '</li>';
}

Здесь $ obj-> name будет содержать имя автора и будет успешно выведен.

Итак, что произойдет, если вместо поля «имя» было названо «элемент»? Очевидно, будут некоторые конфликты. С моим предыдущим опытом работы с Propel & symfony я бы сделал что-то вроде этого: getAuthorId () -> getName () - но для этого проекта мне нужно писать SQL с нуля.

Ответы [ 3 ]

6 голосов
/ 09 июля 2009

Никогда не используйте * синтаксис в производственном коде.

Перепишите ваш запрос следующим образом:

SELECT  news.item AS news_item, author.name AS author_name
FROM    `news`
JOIN    `authors`
ON      news.author_id = authors.id

, при необходимости добавляя псевдонимы к вашим полям, чтобы избежать конфликтов имен.

1 голос
/ 09 июля 2009

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

0 голосов
/ 09 июля 2009

Вы называете их явно

SELECT  n.id, n.item, n.author_id,a.name,a.id 
FROM 
`news` as n JOIN `authors` as a 
ON 
n.author_id = n.id

;

Или, может быть, больше похоже на

SELECT  n.id as newsid, n.item as newsitem, n.author_id as autohor_authorid,
a.name as authorname,a.id as authorid 
FROM 
`news` as n JOIN `authors` as a 
ON 
n.author_id = n.id;

Вы должны вытащить только те колонки, которые вам действительно нужны. Считать плохим стиль - делать *, всегда называть интересующие вас столбцы или легко нарушить код, например, в таблицу добавлен еще один столбец.

...