好的,这就是我现在所拥有的:
$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?
答案 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 _ * - 函数)