【问题标题】:multiple queries vs single query in php using PDO?使用 PDO 在 php 中的多个查询与单个查询?
【发布时间】:2012-06-24 21:27:27
【问题描述】:

我是 PHP 新手,对数据库了解不多。我有一个用户表如下:

------------------------------------------------------------------------
userid|firstname|lastname|password|Emailaddress|gender|agegroup|location
------------------------------------------------------------------------
      |         |        |        |            |       |       |
      |         |        |        |            |       |       |

我想获取特定列值的 genderagegrouplocation 计数。如果我运行单个查询,则数据不会根据我的需要返回。

$query="SELECT AgeGroupId as agegroupid,
        count(AgeGroupId) as agegroupcount,
        GENDER as gender,
        count(GENDER) as gendercount,
        Location as location,
        count(Location) as locationcount 
        FROM userprofile 
        GROUP BY AgeGroupId, GENDER, Location";

如果我运行三个不同的查询,那么我会得到一些我想要的。

$query1="SELECT GENDER as gender,
         count(GENDER) as gendercount 
         FROM userprofile 
         GROUP BY GENDER";
$query2="SELECT AgeGroupId as agegroupid,
         count(AgeGroupId) as agegroupcount 
         FROM userprofile 
         GROUP BY AgeGroupId";
$query3="SELECT Location as location,
         count(Location) as locationcount 
         FROM userprofile 
         GROUP BY Location";

因此,如果我运行三个查询,那么我将获得我想要的格式化数据,如果我运行单个查询,我需要使用 PHP 对其进行格式化。那么哪一个会更好呢?在PHP中运行单个查询并处理数据并获取格式化数据还是运行三个查询并获取格式化数据?

【问题讨论】:

标签: php mysql pdo phpmyadmin


【解决方案1】:

当您使用 3 个查询时,您将向您的数据库发送 3 个请求,这可能需要更长的时间而不是 1 个请求。此外,随着您的桌子变大,它甚至可能需要更长的时间。 在 PHP 中格式化数据会是一个更好的选择,尽管它会使查询变得复杂而难以阅读。

【讨论】:

    【解决方案2】:

    三合一查询:

    SELECT *
    
    FROM
     (SELECT GENDER as gender,
       COUNT(GENDER) as gendercount 
      FROM userprofile 
      GROUP BY GENDER) AS by_gender
    
    INNER JOIN 
     (SELECT AgeGroupId as agegroupid,
       COUNT(AgeGroupId) as agegroupcount 
      FROM userprofile 
      GROUP BY AgeGroupId) AS by_age
    
    INNER JOIN 
     (SELECT Location as location,
       COUNT(Location) as locationcount 
      FROM userprofile 
      GROUP BY Location) AS by_loc
    

    【讨论】:

      猜你喜欢
      • 2014-03-02
      • 1970-01-01
      • 2020-11-04
      • 2019-10-04
      • 1970-01-01
      • 2012-08-04
      • 1970-01-01
      • 1970-01-01
      • 2010-11-13
      相关资源
      最近更新 更多