我正在使用这个 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 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,就像注释中建议的那样。
几条评论开始:
- 我建议尽快远离
mysql_*
- 尽量不要在 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
希望这有帮助。