返回的一对多数据太多-MySQL

返回的一对多数据太多-MySQL,sql,mysql,select,one-to-many,Sql,Mysql,Select,One To Many,在一对多关系中,我有两个相关的MySQL表 客户:客户id、客户名称、客户备注 订单:订单id、客户id、订单注释 因此,如果我通过PHP进行标准连接以获取所有客户及其订单,我会返回如下内容: 杰克·布莱克,杰克的笔记,关于杰克第一份订单的评论 杰克·布莱克,杰克的笔记,关于杰克第二份订单的评论 西蒙·史密斯,西蒙的笔记,关于西蒙第一订单的评论 西蒙·史密斯,西蒙的笔记,关于西蒙第二订单的评论 问题是cust_notes是一个文本字段,可以很大(几千字)。因此,似乎为每个订单返回该字段是不够

在一对多关系中,我有两个相关的MySQL表

客户:客户id、客户名称、客户备注

订单:订单id、客户id、订单注释

因此,如果我通过PHP进行标准连接以获取所有客户及其订单,我会返回如下内容:

  • 杰克·布莱克,杰克的笔记,关于杰克第一份订单的评论
  • 杰克·布莱克,杰克的笔记,关于杰克第二份订单的评论
  • 西蒙·史密斯,西蒙的笔记,关于西蒙第一订单的评论
  • 西蒙·史密斯,西蒙的笔记,关于西蒙第二订单的评论
问题是cust_notes是一个文本字段,可以很大(几千字)。因此,似乎为每个订单返回该字段是不够的

我可以使用GROUP_CONCAT和JOINS返回单行上的所有order_注释,但是order_注释也是一个很大的文本字段,所以看起来这可能会产生问题

我是否应该使用两个单独的查询,一个用于customers表,另一个用于orders表


有更好的方法吗?

如果我正确理解您的问题,最好使用两个查询,以获得如下结果:

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的原因,我试着用一个