0

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

$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呢?

4

3 回答 3

2

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

因此,放弃“ *”,而是给出您要检索的表达式列表,并为某些列分配别名,以便每列都有一个唯一的名称:

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

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

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

于 2013-08-13T00:00:23.837 回答
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']; 
}
于 2013-08-13T00:02:35.900 回答
0

mysql_fetch_array 为您返回一个使用名称和数值的列表,名称将是“ID”,因此第一个会丢失,除非您使用别名在 sql 中重命名它们。但由于您已经有一个数字索引,只需使用$info[0]and$info[1]

改用别名:

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

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

(注意:mysql_*-functions 已弃用)

于 2013-08-12T23:58:04.130 回答