带前缀的MySQL输出*

时间:2011-06-09 11:31:02

标签: mysql join prefix

例如我们有这个查询:

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
}

任何想法?

2 个答案:

答案 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但是这个替代方案给出了期望的结果,对原始查询的更改很少:)