我有一些将在MySQL表上运行用户生成的SQL的PHP代码。查询的可能性是有限的,但可能是,例如
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
发布于 2014-01-03 02:13:08
我想这很简单,您可以在select子句中选择的字段是那些在Group By子句中分组或按聚合函数分组的字段。
所以当你使用
SELECT City, Country, count(*) FROM Table ... GROUP BY City, Country
您的结果集将有多行,每行有三列:city、country、count(*)。城市和国家是按分组的字段。
发布于 2014-01-03 02:17:07
一般来说,答案是否定的。从db接收的是字段名称和值。如果不解析原始查询,您就无法确定哪些字段是聚合,哪些不是。
在您的情况下,可能会有一些可以使用的约束。例如:
但可能是以最好/最稳定的方式来处理问题,以获得对查询生成的更多控制,并设置所需的显式约束或保存稍后所需的详细信息。
也许你可以尝试使用这个函数:http://www.php.net/manual/en/pdostatement.getcolumnmeta.php,但我不认为它会令人满意。
https://stackoverflow.com/questions/20888818
复制相似问题