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'];**