Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
高效的SQL来合并结果还是让客户端浏览器使用javascript?_Sql_Mysql_Performance_Pivot - Fatal编程技术网

高效的SQL来合并结果还是让客户端浏览器使用javascript?

高效的SQL来合并结果还是让客户端浏览器使用javascript?,sql,mysql,performance,pivot,Sql,Mysql,Performance,Pivot,我想知道,将结果组合成单个结果的最有效方法是什么 我想转身 Num Ani Country ---- ----- ------- 22 cows Canada 20 pigs Canada 40 cows USA 34 pigs USA 进入: 我想知道是只使用SQL更好,还是应该将整个查询结果集提供给用户更好。一旦提供给用户,我就可以使用JavaScript将其解析为所需的格式 此外,我不知道如何将其更改为SQL查询的正确格式。我能想到的处理此SQL语句的唯一方

我想知道,将结果组合成单个结果的最有效方法是什么

我想转身

Num  Ani   Country
---- ----- -------
22   cows  Canada
20   pigs  Canada
40   cows  USA
34   pigs  USA
进入:

我想知道是只使用SQL更好,还是应该将整个查询结果集提供给用户更好。一旦提供给用户,我就可以使用JavaScript将其解析为所需的格式


此外,我不知道如何将其更改为SQL查询的正确格式。我能想到的处理此SQL语句的唯一方法是通过动态创建临时表来实现非常迂回的操作。

您所追求的操作称为“数据透视”——即:


应该有一种在客户端(php)使用二维数组来实现数据透视的有效方法。为了解决Ken Downs对字节推送的担忧,一个粗糙的原始数据透视表比一个完全物化的二维数据透视表消耗更少的字节,简单的例子是

cows | pigs | sheep | goats | country
1      null   null    null    Canada
null   2      null    null    USA
null   null   3       null    Egypt
null   null   null    4       England
只有4行原始数据(每行3列)

在前端这样做也解决了动态旋转的问题。如果透视列的数量未知,则需要一个MySQL过程为每个列构建一个模式为“MAX(CASE….)”的动态sql语句

在客户端这样做有很多好处

  • 可以完成(至少作为备选方案考虑)
  • 可以提前呈现,前提是尽管需要(1)php数据透视表构造或(2)客户端javascript,但网络通信量的节省是显著的
  • 动态数据透视不需要MySQL过程

  • 假设你的结果真的那么小,这种优化是完全没有意义的,是浪费你的时间……是的,在服务器上旋转更有效,你不必把所有的字节都推到电线上,只要答案。
      SELECT MAX(CASE WHEN t.ani = 'cows' THEN t.num ELSE NULL END) AS cows,
             MAX(CASE WHEN t.ani = 'pigs' THEN t.num ELSE NULL END) AS pigs,
             t.country
        FROM YOUR_TABLE t
    GROUP BY t.country
    ORDER BY t.country
    
    cows | pigs | sheep | goats | country
    1      null   null    null    Canada
    null   2      null    null    USA
    null   null   3       null    Egypt
    null   null   null    4       England