使用前缀的MySQL输出*

使用前缀的MySQL输出*,mysql,join,prefix,Mysql,Join,Prefix,例如,我们有以下查询: SELECT c.*, cu.* FROM cart c, customer cu WHERE cu.id = c.customerId 现在我将获得carts+相应客户的所有数据。但我希望将其作为前缀或在单独的对象中作为以下对象 前缀版本: 结果: cartid = 384 cartstatus = 5 customerid = 443 customername = 593 cart: { id: 384, status: 5 }, customer: {

例如,我们有以下查询:

SELECT c.*, cu.* FROM cart c, customer cu WHERE cu.id = c.customerId
现在我将获得carts+相应客户的所有数据。但我希望将其作为前缀或在单独的对象中作为以下对象

前缀版本:

结果:

cartid = 384
cartstatus = 5
customerid = 443
customername = 593
cart: {
  id: 384,
  status: 5
},
customer: {
  id: 443,
  name: 593
}
对象版本:

结果:

cartid = 384
cartstatus = 5
customerid = 443
customername = 593
cart: {
  id: 384,
  status: 5
},
customer: {
  id: 443,
  name: 593
}

有什么想法吗?

我认为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;

如果我需要这样的查询,我会使用类似

$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
<? echo $customerid.', your are currently using '.$cartid.', please make sure this is correct'; ?>
这允许我们重新定义users.id,以便在我们创建变量时,它在页面中可用作user_id。在我当前的web应用程序中,我有两个表,其中包含重复的“id”列,我已经在这些表上测试了此解决方案

为了演示如何帮助实现我正在使用的PHP工作解决方案,如果这与您无关,您可以忽略它,然后用您喜欢的语言编写代码

然后,可以将SQL输出用作

$cartid = $result['cartid'];
$customerid = $result['customerId'];
例如,变量$cartid、$customerid和任何其他指定的变量都可以在PHP中使用

users.id AS user_id
<? echo $customerid.', your are currently using '.$cartid.', please make sure this is correct'; ?>
这将显示一个数组,如

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不支持我以前发布的方法,但是这个替代方法在对原始查询进行最小更改的情况下提供了所需的结果:)

通常,在select子句中使用*是一种混乱的做法,应该避免。解决方案是使用带有显式别名的显式列引用。MySQL没有“对象”。您打算如何获得该输出?您确定PHP可以访问您提到的别名字段名吗?i、 e.
c.id
?如果表别名能够进入应用程序逻辑,我会感到惊讶…我尝试了,但没有得到任何输出。。。也许代码中缺少了一个步骤?我以前做过,但大约两年前,正如我提到的。。。今晚或明天我都得把代码挖出来你说得对,卢卡斯,我已经提取了代码并更正了它,以提供问题所需的结果。谢谢你指出这一点,伙计!:)PHP从何而来?这个问题与PHP.Txs无关,我担心我必须这么做。。。请看,我必须与现有的数据库,并需要这样做的每一个查询,但为输入感谢!