【问题标题】:MySQL output with prefix using *使用 * 前缀的 MySQL 输出
【发布时间】:2011-06-09 11:31:01
【问题描述】:

例如我们有这个查询:

SELECT c.*, cu.* FROM cart c, customer cu WHERE cu.id = c.customerId

现在我将获取购物车 + 相应客户的所有数据。但我想将它作为前缀或在单独的对象中作为以下对象。

前缀版本:

结果:

cartid = 384
cartstatus = 5
customerid = 443
customername = 593

对象版本:

结果:

cart: {
  id: 384,
  status: 5
},
customer: {
  id: 443,
  name: 593
}

有什么想法吗?

【问题讨论】:

  • 一般来说,在 select 子句中使用 * 是一种混乱的做法,应该避免。解决方案是使用具有显式别名的显式列引用。
  • MySQL 没有“对象”。您打算如何获得该输出?

标签: mysql join prefix


【解决方案1】:

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

【讨论】:

  • Txs,我担心我必须这样做...看到我必须使用现有数据库并且需要为每个查询执行此操作,但感谢您的输入!
【解决方案2】:

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

的查询
$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。使用我当前的网络应用程序,我确实有 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 不支持我之前发布的方法但是这个替代方案给出了对原始查询的更改最小的期望结果:)

【讨论】:

  • 您确定,PHP 可以访问您提到的别名字段名称吗?即c.id?如果表别名会进入应用程序逻辑,我会感到惊讶......
  • 我试过但没有得到任何输出...也许代码中缺少一个步骤?
  • 我以前做过,但大约 2 年前,正如我提到的......我今晚或明天必须挖掘代码
  • 你说得对 Lukas,我已经提取代码并更正它以提供问题所需的结果。谢谢你指出那个伙伴! :)
  • PHP 是从哪里来的?这个问题与PHP无关。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-23
  • 1970-01-01
相关资源
最近更新 更多