【发布时间】:2017-01-24 05:11:06
【问题描述】:
我有这样的表:
餐桌产品
[ 标识 |姓名]
表格图片
[ 产品 ID |网址 |订单号]
餐桌价格
[ 产品 ID |组合 |货币 |价格]
表格数量
[ 产品 ID |组合 |数量]
表格产品与其他表格是一对多的关系。我需要查询表并得到类似这样的结果(伪数组):
[
ProductId: 1,
Name: 'Sample product',
Images: [
[url, 1],
[url, 2]
],
Prices: [
[aaa, USD, 50.00],
[aaa, EUR, 50.00],
[bbb, USD, 59.00],
[bbb, EUR, 59.00]
],
Quantities: [
[aaa, 5],
[bbb, 3]
]
]
我现在的做法如下:
我查询所有产品,列出它们的 ID,然后使用 WHERE IN 子句查询每个表(图像、价格、数量)。当我拥有所有数据后,我开始解析 php 中的表格以获得所需的结构。
我想知道是否有更好的方法来提取这些数据,我有很多这样的不同表,并且为每个表创建配置解析器有点混乱和有问题。有没有可能mysql会承担我的一些负担?
谢谢
【问题讨论】:
-
您可以只使用一个带有左连接的查询来获得它,尽管它不会将结果显示为您的伪数组,它将是产品表的信息以及其他表的等效连接值.对你来说可以吗?
-
这就是人们使用 ORM 的原因,就像在最流行的 php 框架中发现的那样。看看 Doctrine2,Laravel 中的 Eloquent 或 Propel。本质上,您设置的映射类也可以让您指定连接。然后您可以在代码中使用对象,ORM 通常会为您加载关系,因此您不必在代码中一直关注编写 sql 语句,并且可以更自然地使用表示表的对象类及其相关数据。
-
@gview 我看不出 orms 是如何让这件事变得简单的。然后,我们努力帮助用户让 orms 正常工作
-
@Drew:你说得对,使用 ORM 附带的内置查询语言,有些查询要么效率低下,要么非常困难。在 Doctrine2 中,这就是为什么你不时下到 DBAL 并滚动一些 sql 的原因。
-
我不使用
MySQL,但我知道在T-SQL中有提示输出结果为XML。例如。SELECT name FROM master.sys.tables FOR XML AUTO。也许MySQL有类似的功能,但JSON?另外,我建议使用WHERE EXISTS SELECT(...而不是WHERE Id IN(...
标签: mysql sql database database-design mariadb