使用mysql_fetch_assoc中的变量从多行中的列输出数据。

时间:2009-05-24 21:12:22

标签: php mysql

如果我有这样的查询

$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 个答案:

答案 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 *更为重要,因为它很容易出错并且难以调试。