当我有2个同名时,如何识别mysql中的列

时间:2014-11-25 23:38:40

标签: php mysql

我正在使用这个PHP代码来获取连接2个表的sql查询...两个表都有相同的“大小”字段,但两个结果都不一样...代码:

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,size,....还有第二个尺寸

1个尺寸来自购物车桌,1个来自产品表..

然后我尝试检索我的数据

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

但是我在结果中获得了第二个尺寸,我需要第一个..我需要cart.size ...我怎么能这样做?

6 个答案:

答案 0 :(得分:1)

在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 .......

然后从结果中提取ProductSize的值。

如果您不需要购物车尺寸,可以将其从列列表中删除并退出ALIAS,因为您在结果中只有一个尺寸列:

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

一般情况下,在SELECT语句中明确命名所需的列是个好主意,因为它会使您更清楚地回复它,如果您尝试获取列,它将很快失败那不存在(当SELECT执行时,而不是当你尝试从结果集中检索列值时),如果你只对一个小的子集感兴趣,那么可以带来更好的性能。可用的专栏。

答案 1 :(得分:1)

  

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

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

答案 2 :(得分:0)

使用SQL别名。例如:

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

答案 3 :(得分:0)

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

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

然后它们将在您的数组中作为键product_size和cart_size。

答案 4 :(得分:0)

试试这个:

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,就像在评论中首先提到的那样。

答案 5 :(得分:0)

一些评论开头:

  1. 我建议您尽快离开mysql_*
  2. 尽量不要在select语句中使用*运算符
  3. 至于你的问题,使用两列的别名,我也想给我的表一个更简单的别名(使查询更简洁):

    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
    

    希望这有帮助。