使用PHP从多个表中获取具有相同名称的列

时间:2013-08-12 23:48:37

标签: php mysql

好的,这就是我现在所拥有的:

$stuff = mysql_query("SELECT * FROM Table1, Table2") or die(mysql_error());
if ($info = mysql_fetch_array($stuff)) {
    $table1ID = $info['Table1.ID'];
    $table2ID = $info['Table2.ID'];
}

我的问题是这不起作用。我一无所获。当我这样做时:

$stuff = mysql_query("SELECT * FROM Table1, Table2") or die(mysql_error());
if ($info = mysql_fetch_array($stuff)) {
    $table1ID = $info['ID'];
    $table2ID = $info['ID'];
}

它是相同的ID(当然)。那么当它们具有相同的名称时,如何获得第一个表和第二个表的ID?

3 个答案:

答案 0 :(得分:2)

如果要按名称引用结果集中的列,则结果集中的每一列都需要具有唯一名称。

因此,抛弃“*”,而是提供要检索的表达式列表,并为某些列指定别名,以便每列都有唯一的名称:

SELECT t1.id
     , t2.id AS t2_id
     , t1.somecol            
  FROM Table1 t1
 CROSS
  JOIN Table2 t2

逗号运算符相当于[CROSS] JOIN。 Table1中的每一行都将与Table2中的每一行(笛卡尔积)匹配。这有点奇怪。 (它不是无效的,它只是不正常的模式。(这是一种简单的方法,可以使光线变暗,并且我怀疑这不是您想要的实际结果集。)

另一种选择是按位置而不是按名称引用列。 (但正如Marc B指出“位置字段表示法”是一个坏主意。)

答案 1 :(得分:1)

尝试对列名称进行别名处理,但是这将涉及从表中对所需的所有列进行别名处理,如果它是一个大表将会很痛苦

$stuff = mysql_query("SELECT Table1.ID As ID1, Table2.ID As ID2 FROM
Table1, Table2") or die(mysql_error());

// don't need to use mysql_fetch_array, unless you are referencing
// data by col num as well as key name 
if ($info = mysql_fetch_assoc($stuff)) {
    $table1ID = $info['ID1'];
    $table2ID = $info['ID2']; 
}

答案 2 :(得分:0)

mysql_fetch_array使用名称和数值返回一个列表, 名字将是' ID'对于两者,所以第一个丢失,除非你使用别名在你的SQL中重命名它们。 但由于您已有数字索引,只需使用$info[0]$info[1]

即可

改为使用别名:

$query = "SELECT Table1.ID AS id1, Table2.ID as id2 FROM Table1, Table2";

然后使用$info['id1']$info['id2']

(注意:不推荐使用mysql _ * - 函数)