использование переменной в mysql_fetch_assoc для вывода данных из столбца в несколько строк. - PullRequest
0 голосов
/ 25 мая 2009

если у меня есть такой запрос

$query = mysql_query("
SELECT * FROM tbl_school
INNER JOIN tbl_livingexp ON (tbl_school.schoolname=tbl_livingexp.schoolname)
INNER JOIN tbl_tuition ON (tbl_school.schoolname=tbl_tuition.schoolname)
INNER JOIN tbl_apprequirments ON 
(tbl_school.schoolname=tbl_apprequirments.schoolname) 
where tbl_school.schoolname = '$schoolname'");

и 3 таблицы содержат столбец с именем language.
когда я начну писать этот код.

while($row = mysql_fetch_assoc($query)) {
//output.

как вывести язык столбцов только из таблицы tbl_school, если бы я набрал его так?

$row['language'];  ?

я пробовал $ row ['tbl_school.language']; но это дало мне ошибку.

Ответы [ 3 ]

1 голос
/ 25 мая 2009

В производственном коде старайтесь избегать SELECT * любой ценой. Вам необходимо явно указать имена столбцов в запросе:

SELECT 
  le.schoolname, 
  le.language AS livingexp_language, 
  t.language AS tuition_language,
  ...
FROM tbl_school
INNER JOIN tbl_livingexp AS le ON (tbl_school.schoolname=tbl_livingexp.schoolname)
INNER JOIN tbl_tuition AS t ON (tbl_school.schoolname=tbl_tuition.schoolname)
...

Использование:

$row["livingexp_language"];
1 голос
/ 25 мая 2009

(для полноты картины) Вы также можете достичь того же, используя mysql_fetch_row вместо mysql_fetch_assoc, который помещает ваши результаты в числовой массив, на который вы можете ссылаться таким образом:

$row = mysql_fetch_row($query);
$id = $row[0];
$language = $row[1]; // for instance

В этом случае еще более важно избегать SELECT *, поскольку он позволяет легко делать ошибки и затруднять отладку.

1 голос
/ 25 мая 2009

Вы должны явно назвать их:

SELECT a.foo first_col, b.foo second_col, c.foo third_col
FROM a, b, c
WHERE [conditions]

Если вы выбираете данные, используя

$row = mysql_fetch_assoc($query);

теперь вы можете получить доступ к столбцам, используя $ row ["first_col"], $ row ["second_col"] и $ row ["third_col"]. Это связано с тем, как работает клиентская библиотека mysql. Имя таблицы просто не будет добавлено к имени столбца. Это означает, что каждое имя столбца должно быть уникальным, чтобы отображаться в результате.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...