无论如何都要告诉MySQL结果中哪些字段是分组字段(PHP)

时间:2014-01-02 17:56:45

标签: php mysql

我有一些PHP代码可以在MySQL表上运行用户生成的SQL。查询可能性有限,但可以是,例如

SELECT City, Country, count(*) FROM Table ... GROUP BY City, Country

SELECT count(*) AS Count, Role, Country FROM Table ... GROUP BY Role, Country

SELECT count(*), TicketType, City, SUM(Quantity) AS 'Total Quantity' FROM Table ... GROUP BY TicketType, City

等等。

在显示查询结果时,如果列是分组字段(例如COUNT或SUM或AVG等),我想采取一种操作。

除解析查询外,有没有办法确定哪些字段是结果集中的分组字段?我正在使用mysqli和PHP

2 个答案:

答案 0 :(得分:0)

这很简单我想,您可以在SELECT子句中选择的唯一字段是分组在Group By子句中或按聚合函数分组的字段。

所以当你使用

SELECT City, Country, count(*) FROM Table ... GROUP BY City, Country

您的结果集将有多行,每行包含三列:city,country,count(*)。城市和国家是按照分组的字段。

答案 1 :(得分:0)

一般来说,答案是否定的。 您从db收到的是字段名称和值。如果不解析原始查询,则无法确定哪些字段是聚合,哪些字段不是聚合。

可能在您的情况下,您可以使用约束。例如:

  • 如果数字只能是生成字段,则可以检查结果的内容。 (当然这很不稳定。)
  • 也许您可以使用该字段的名称作为提示。也许它包含与聚合相关的内容。 (总和,数,总数,......)

但可能以最佳/最稳定的方式处理您的问题以获得对查询生成的更多控制,并设置您需要的显式约束或保存稍后您需要的详细信息。

也许您可以尝试使用此功能:http://www.php.net/manual/en/pdostatement.getcolumnmeta.php 但我认为这不会令人满意。