如果我有这样的查询
$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'];但这给了我一个错误。
答案 0 :(得分:1)
你必须明确地命名它们:
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客户端库的工作原理。表名不会被添加到列名前面。这意味着每个列名必须是唯一的才能显示在结果中。
答案 1 :(得分:1)
在生产代码中,尽量避免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"];
答案 2 :(得分:1)
(为了完整起见)你也可以使用mysql_fetch_row而不是mysql_fetch_assoc来实现同样的目的,它将你的结果放在一个你可以这样引用的数值数组中:
$row = mysql_fetch_row($query);
$id = $row[0];
$language = $row[1]; // for instance
在这种情况下,避免使用SELECT *更为重要,因为它很容易出错并且难以调试。