当我有 2 个同名时,如何在 MySQL 中识别一列


how to identify a column in mysql when I have 2 with same name

我正在使用这个 PHP 代码来获取我的 sql 查询,它连接了 2 个表......两个表具有相同的"大小"字段,但两个表中的结果并不相同...法典:

mysql_query("SELECT * FROM cart INNER JOIN tbl_product ON tbl_product.product_id =
cart.product_id WHERE .......) or die(mysql_error()); 

此查询的结果显示我

Cart_id, member_id, product_id, 大小, ....和第二个尺寸

1 的大小来自购物车表,

1 来自产品表。

然后我尝试检索我的数据

while($data2 = mysql_fetch_array( $data))
{ 
    $size=  $data2['size']; 

但是我在结果中得到了第二个尺寸,我需要第一个。我需要购物车大小... 我该怎么做?

在 SELECT 语句中显式命名列,并将 ALIASes 分配给具有相同名称的列:

SELECT cart.id_col, cart.size AS CartSize, ttbl_product.size AS ProductSize 
  FROM cart INNER JOIN tbl_product ON tbl_product.product_id = cart.product_id 
  WHERE .......

然后从结果中提取产品尺寸的值。

如果您不需要购物车尺寸,则可以将其从返回列列表中删除并省略 ALIAS,因为结果中只有一个 Size 列:

SELECT cart.id_col, ttbl_product.size  
  FROM cart INNER JOIN tbl_product ON tbl_product.product_id = cart.product_id 
  WHERE .......

一般来说,在 SELECT 语句中显式命名您想要的列是个好主意,因为它可以更清楚地了解您要返回的内容,如果您尝试获取不存在的列(当 SELECT 执行时,而不是当您尝试从结果集中检索列值时),它会更快地失败), 如果您只对可用列的一小部分感兴趣,则可以带来更好的性能。

可以使用 AS alias_name为select_expr指定别名。别名是 用作表达式的列名 [...]

这是 SQL 中 SELECT 语句的基本特性。请查阅手册:http://dev.mysql.com/doc/refman/5.0/en/select.html

使用 SQL 别名。考考:

SELECT a.a AS aa, b.a AS ba FROM tbl1 AS a, tbl2 AS b
将 SELECT

* 更改为 SELECT [字段],您可以在其中手动指定所需的字段。如果您只需要一个,那么就没有什么可做的了。如果两者都需要,则可以对字段使用别名,如下所示:

SELECT p.size AS product_size, c.size AS cart_size FROM ...

然后,它们将作为键product_size和cart_size在阵列中可用。

试试这个:

mysql_query("SELECT cart.size as cartsize, tbl_product.size as productsize, ...
FROM cart INNER JOIN tbl_product ON tbl_product.product_id = cart.product_id
WHERE ...) or die(mysql_error());

但是,如果您不处理某些遗留代码,则不想完全重写PDO,就像注释中建议的那样。

几条评论开始:

  1. 我建议尽快远离mysql_*
  2. 尽量不要在 select 语句中使用 * 运算符

至于你的问题,两列使用别名,我也想给我的表一个更简单的别名(使查询更简洁):

SELECT t1.id, t1.size AS cart_size, t2.size AS product_size FROM cart t1
INNER JOIN tbl_product t2 ON t1.product_id = t2.product_id

希望这有帮助。