返回的一对多数据太多-MySQL
在一对多关系中,我有两个相关的MySQL表 客户:客户id、客户名称、客户备注 订单:订单id、客户id、订单注释 因此,如果我通过PHP进行标准连接以获取所有客户及其订单,我会返回如下内容:返回的一对多数据太多-MySQL,sql,mysql,select,one-to-many,Sql,Mysql,Select,One To Many,在一对多关系中,我有两个相关的MySQL表 客户:客户id、客户名称、客户备注 订单:订单id、客户id、订单注释 因此,如果我通过PHP进行标准连接以获取所有客户及其订单,我会返回如下内容: 杰克·布莱克,杰克的笔记,关于杰克第一份订单的评论 杰克·布莱克,杰克的笔记,关于杰克第二份订单的评论 西蒙·史密斯,西蒙的笔记,关于西蒙第一订单的评论 西蒙·史密斯,西蒙的笔记,关于西蒙第二订单的评论 问题是cust_notes是一个文本字段,可以很大(几千字)。因此,似乎为每个订单返回该字段是不够
- 杰克·布莱克,杰克的笔记,关于杰克第一份订单的评论
- 杰克·布莱克,杰克的笔记,关于杰克第二份订单的评论
- 西蒙·史密斯,西蒙的笔记,关于西蒙第一订单的评论
- 西蒙·史密斯,西蒙的笔记,关于西蒙第二订单的评论
有更好的方法吗?如果我正确理解您的问题,最好使用两个查询,以获得如下结果:
Jack black
comments
comments
comments
comments
Simon Smith
comments
comments
comments
如果我正确理解您的问题,最好使用两个查询,以获得如下结果:
Jack black
comments
comments
comments
comments
Simon Smith
comments
comments
comments
我们通常使用几种不同的策略 在一个案例中,我们返回了多个结果集——一个用于父母,一个用于所有孩子。ORDER BY是相同的,因此您可以轻松地在客户机代码中交错每个父级的子级 还可以返回多个结果集-一个用于父级,一个用于每个父级(我们使用光标作为外部部分)的子级集
我们使用的另一个东西(在SQL Server中)是XML,因此它实际上返回了层次结构形式。通常我们使用几种不同的策略 在一个案例中,我们返回了多个结果集——一个用于父母,一个用于所有孩子。ORDER BY是相同的,因此您可以轻松地在客户机代码中交错每个父级的子级 还可以返回多个结果集-一个用于父级,一个用于每个父级(我们使用光标作为外部部分)的子级集
我们使用的另一个东西(在SQL Server中)是XML,因此它实际上返回了层次结构形式。您可以运行两个查询,一个用于注释,另一个用于客户详细信息
// this will give you orders in an efficient way
SELECT cust_id, order_id, order_comments
FROM customers AS c
LEFT JOIN orders as o ON o.cust_id = c.cust_id
LIMIT xx, yy
// this will get all details from N specific customers
SELECT * FROM customers
WHERE cust_id = 'xxx' OR cust_id = 'yyy' OR cust_id = 'zzz'
然后将第二个查询传递给数组,在显示第一个查询时,使用存储在数组中的客户详细信息
应该非常有效。您可以运行两个查询,一个用于注释,另一个用于客户详细信息
// this will give you orders in an efficient way
SELECT cust_id, order_id, order_comments
FROM customers AS c
LEFT JOIN orders as o ON o.cust_id = c.cust_id
LIMIT xx, yy
// this will get all details from N specific customers
SELECT * FROM customers
WHERE cust_id = 'xxx' OR cust_id = 'yyy' OR cust_id = 'zzz'
然后将第二个查询传递给数组,在显示第一个查询时,使用存储在数组中的客户详细信息
应该很有效率。看。您的页面很像SO上的问题页面。先提问,然后回答以下问题。
没人费心用一个查询请求它 答案-是的,使用join,但仅获取姓名和id,而不是完整的用户信息。
没什么复杂的
只需对客户和订单列表使用单独的查询即可查看。您的页面很像SO上的问题页面。先提问,然后回答以下问题。
没人费心用一个查询请求它 答案-是的,使用join,但仅获取姓名和id,而不是完整的用户信息。
没什么复杂的
只需对客户和订单列表使用单独的查询此查询的目的是什么?你是要用分页还是什么来列出它?在PHP页面上,我需要显示一个客户的所有数据,然后是他们所有相关的订单。当一个给定客户的订单>20时,我将创建某种分页系统。对于一个客户?那么问题是什么?问题是我只需要返回cust_notes字段一次。但是,对于正常联接,它将为每个关联订单返回。这似乎是不够的,因为cust_notes字段的大小(几千字或更多)如果您只请求一个客户的信息,那么没有理由使用单个查询。只需先请求客户信息,然后请求他们的订单并将其列在下面。这不是很明显吗?如果你需要一些其他的数据表示,可以有其他的答案。这个查询的目的是什么?你是要用分页还是什么来列出它?在PHP页面上,我需要显示一个客户的所有数据,然后是他们所有相关的订单。当一个给定客户的订单>20时,我将创建某种分页系统。对于一个客户?那么问题是什么?问题是我只需要返回cust_notes字段一次。但是,对于正常联接,它将为每个关联订单返回。这似乎是不够的,因为cust_notes字段的大小(几千字或更多)如果您只请求一个客户的信息,那么没有理由使用单个查询。只需先请求客户信息,然后请求他们的订单并将其列在下面。这不是很明显吗?如果您需要其他数据表示,可以有其他答案。是的,也许两个查询会更好。由于通过PHP的连接开销,我试图避免这种情况。@emcpete您能用两个查询提交一个请求并获得连续的结果集吗@emcpete你的应用程序中真的遇到了连接问题吗?嗯,我不太清楚你的意思。你能给我举个例子吗?是的,也许两个问题会更好。由于通过PHP的连接开销,我试图避免这种情况。@emcpete您能用两个查询提交一个请求并获得连续的结果集吗@emcpete你的应用程序中真的遇到了连接问题吗?嗯,我不太清楚你的意思。你能给我举个例子吗?是的,我想两个问题是最好的选择。由于p的原因,我试着用一个