例如我们有这个查询:
SELECT c.*, cu.* FROM cart c, customer cu WHERE cu.id = c.customerId
现在我将获得购物车的所有数据+相应的客户。但我希望将这个前缀或单独的对象作为以下对象。
PREFIX版本:
结果:
cartid = 384
cartstatus = 5
customerid = 443
customername = 593
对象版本:
结果:
cart: {
id: 384,
status: 5
},
customer: {
id: 443,
name: 593
}
任何想法?
答案 0 :(得分:2)
我认为MySQL不允许您将数据作为“对象”获取,因为您想拥有它们。其他RDBMS知道UDT,但MySQL不知道。
如果你想要有前缀,你必须逐个别名你的字段,即
select c.id as cartid,
c.status as cartstatus,
cu.id as customerid,
cu.name as customername
from cart c, customer cu
where cu.id = c.customerId
如果您经常在连接查询结果中需要这些前缀,那么我建议您将它们直接添加到表格列中,或者如果不容易实现,请创建视图:
create view v_cart as
select id as cart_id,
status as cart_status
from cart;
create view v_customer as
select id as customer_id,
name as customer_name
from customer;
然后您可以轻松使用这些视图:
select * from v_cart, v_customer where customer_id = cart_customer_id;
答案 1 :(得分:0)
如果我要求这样的查询,我会使用类似于
的查询$sql = "SELECT c.id AS cartid,c.*,cu.* FROM c,cu WHERE cu.id = c.customerId";
$result = mysql_query($sql) or die(mysql_error());
这里的技巧是为SQL查询中的任何重复列名创建别名,例如“id”,例如
users.id AS user_id
这允许我们重新定义users.id,以便在创建变量时它可以在我们的页面中用作user_id。使用我当前的Web应用程序,我有2个表,其中包含重复的“id”列,我已经测试了此解决方案。
为了演示以帮助实现我使用PHP的工作解决方案,如果它与您无关并使用您的首选语言编写代码,则可以忽略它。
然后可以将SQL输出用作
$cartid = $result['cartid'];
$customerid = $result['customerId'];
使用变量$ cartid,$ customerid以及任何其他指定可用于PHP的变量,例如
<? echo $customerid.', your are currently using '.$cartid.', please make sure this is correct'; ?>
为了帮助您定义变量,您可以执行类似
的操作print_r($result);
这将显示类似
的数组Array ([id] => 1 [user_id] => 2 [shop_name] => My Shop)
要创建变量,只需将$ result定义为数组ID,如
$id = $result['id'];
$customerid = $result['user_id'];
$shopname = $result['shop_name'];
依此类推,直到你需要定义所有变量为止。
这是你要找的吗?您可能需要调整查询字符串,因为这是从上次我在大约2年前沿着这些行做某事时从内存中调整的。
我希望它有所帮助。
注意:它开始让我烦恼,所以我从服务器中提取了旧代码,我编辑了这篇文章来纠正我之前使用的语法,我发布的上一个方法不支持PHP但是这个替代方案给出了期望的结果,对原始查询的更改很少:)