Php 如何在MySQL左连接查询中访问两个同名列?

Php 如何在MySQL左连接查询中访问两个同名列?,php,mysql,join,Php,Mysql,Join,我有两张桌子 表十: id INT(11) tag INT(11) 表3.1.1-1: id INT(11) name VARCHAR(255) 然后我使用PHP执行以下查询: SELECT * FROM table_x LEFT JOIN table_tags ON table_x.tag = table_tags.id 唯一的问题是:如何访问结果中的table_x.id和table_tags.id 以下是PHP代码: $query = "SELECT * FROM t

我有两张桌子

表十:

id    INT(11)
tag   INT(11)
表3.1.1-1:

id    INT(11)
name  VARCHAR(255)
然后我使用PHP执行以下查询:

SELECT * FROM table_x LEFT JOIN table_tags ON table_x.tag = table_tags.id
唯一的问题是:如何访问结果中的
table_x.id
table_tags.id

以下是PHP代码:

$query = "SELECT * FROM table_x LEFT JOIN table_tags ON table_x.tag = table_tags.id";
$results = mysql_query($query);

while($row = mysql_fetch_array($results))
{
    // how do I now access table_x.id and table_tags.id ???
}

您可以命名列列表中的列:

SELECT 
  table_x.id AS x_id, 
  table_tags.id AS tag_id,
  other, columns, here
FROM table_x LEFT JOIN table_tags 
ON table_x.tag = table_tags.id
一般来说,将要显式返回的列命名为好的形式,而不是依赖*(如果基础表结构发生变化,可能会导致列的实际数量、顺序和名称发生变化)。同时,为了便于使用,可以在结果集中使用新名称为列别名(AS关键字在大多数SQL方言中是可选的)

更新:OP在评论中声明他必须使用“*”。虽然不建议这样做,但您可以这样做:

SELECT 
  table_x.id AS x_id, 
  table_tags.id AS tag_id,
  *
FROM table_x LEFT JOIN table_tags 
ON table_x.tag = table_tags.id
它结合了所需的命名列和(坏的)“*”技术。您的列将两次包含在结果集中,前两列位置和列列表中的常规位置。值将是相同的。

像这样使用它

$query=“选择(table_x.id)作为xid,(table_tags.id)作为tid从table_x LEFT JOIN table_tags ON table_x.tag=table_tags.id”

$results=mysql\u query($query)

while($row=mysql\u fetch\u数组($results)) {

//获取带有tid的表\u标记的id

 **echo "table_tags id: ".$row['tid'];**

}

如果不选择*,而是逐列选择,这并不难。您是否正在寻找一种不使用select*的方法?不,如果可能的话。我需要
*
。当然,如果没有别的办法,我就放弃。还有别的办法吗?我真的需要在我的查询中使用
*
。你不应该使用*。但是,如果必须,您应该能够使用整数索引将列值放入每行的数据中。当然,您将完全依赖于列号和顺序,并且您的代码在将来会中断。您还可以在结果数据集中迭代返回的列名列表,但我不知道这些信息是否包括源表的名称。哦,还有一个想法:选择col1作为name1,col2作为name2,*FROM。结合了这两种技术。哦,完美!但是太晚了。。。我只是将代码改为不使用
*
,这是个好主意。不过谢谢你的提示。
 **echo "table_tags id: ".$row['tid'];**