2011-06-09 52 views
2

例如,我们有这个疑问:MySQL的输出与前缀使用*

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

通常,在select子句中使用*是一个混乱的做法,应该避免。解决方案是使用明确的列引用和明确的别名。 – symcbean 2011-06-09 11:37:34

+0

MySQL没有“对象”。你打算如何达到这个产出? – 2011-06-09 14:01:36

回答

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

Txs,我很担心我必须这样做...看到我必须使用现有的数据库,并且需要为每个查询执行此操作,但是要感谢输入! – 2011-06-09 12:15:00

+0

或者,你可以使用视图来为你做别名... – 2011-06-09 12:16:33

+0

txs我会牢记:) – 2011-06-09 12:47:55

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查询“身份证”创建别名查询,因此,例如

users.id AS user_id 

这让我们重新定义users.id所以这是我们作为USER_ID页面可用时,我们创建变量。使用我目前的网络应用程序,我确实有2个表格带有重复的“id”列,我已经测试了此解决方案。

为了演示如何帮助实施工作解决方案,我使用的是PHP,如果它与您无关并且使用您的首选语言进行编码,则可以忽略它。

的SQL输出可以被用来作为

$cartid = $result['cartid']; 
$customerid = $result['customerId']; 

与变量$ cartid,$客户ID和其他任何指定的是在你的PHP使用avaliable,例如

<? 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) 

阵列要创建变量只需定义$结果作为数组ID喜欢

$id = $result['id']; 
$customerid = $result['user_id']; 
$shopname = $result['shop_name']; 

依此类推,直到你需要定义是所有变量。

这是你在找什么?您可能需要调整查询字符串,因为这是来自上次大约两年前沿着这些行做的事情的内存。

我希望它有帮助。

注意:它开始误导我,所以我从服务器上拉出了旧代码,我已经编辑了这篇文章以纠正之前使用的语法,我发布的以前的方法不受PHP支持,但是此替代方法期望的结果,对原始查询进行最小的更改:)

+0

你确定,PHP实际上可以访问别名字段名称吗?即'c.id'?我会很惊讶,如果表别名会使它的应用程序逻辑... – 2011-06-09 12:12:28

+0

我试过,但没有得到任何输出......也许有一步在代码中缺少? – 2011-06-09 12:22:29

+0

我之前做过,但大约2年前,正如我所提到的......我将不得不在今晚或明天挖掘代码 – Ryan 2011-06-09 12:23:08