假设我的MySQL数据库中有以下表格:
TABLE Products
| id | some_column1 | some_column2 |
TABLE ProductProperties
| id | product_id | name |
过度简化但足够。现在我想获得所有具有属性的产品。我这样做:
SELECT * FROM `Products` JOIN `ProductProperties` ON Products.id = ProductProperties.product_id
我能得到什么?
| id | some_column1 | some_column2 | id | product_id | name |
这并不酷,我希望以下列两种方式之一让它变得很酷:
1)获取像Product表中的对象数组,但是又扩展了一个成员,这是与JOIN匹配的属性数组。我有点想通了,这是不可能的吗?
2)要获得这样的数组(我仍然需要在PHP中迭代它以将一个产品中的所有属性连接到一个对象中):
| product_id | some_column1 | some_column2 | property_id | product_id | name |
所以我想将ProductProperties.id列重命名为ProductProperties.property_id。如果我也可以从输出中删除ProductProperties.product_id,那将是理想的,但是现在,我只想要在输出中重命名一列的方法。或者以表名为前缀。或类似的东西。
可行?
答案 0 :(得分:3)
您应该明确命名列,而不是使用*
。然后,不要返回冗余列:
SELECT p.id as productid, p.some_column1, p.some_column2,
pp.id as ProductPropertiesId, pp.name
FROM `Products` p JOIN `ProductProperties` pp
ON p.id = pp.product_id
此外,表别名使这样的查询更具可读性。
答案 1 :(得分:1)
SELECT Products.id product_id,
Products.some_column1,
Products.some_column2,
ProductProperties.id property_id,
ProductProperties.name
FROM `Products`
JOIN `ProductProperties`
ON Products.id = ProductProperties.product_id