Php 使用GROUPBY的多mysql查询

Php 使用GROUPBY的多mysql查询,php,mysql,pdo,Php,Mysql,Pdo,目前我正在重新分解我的代码,目前我有 $query="SELECT DISTINCT TRIPID FROM trips_info WHERE userid=$userid"; $results = $dbh->query($query)->fetchAll(); foreach ($results as $i => $row) { $iquery="SELECT COUNT(id) FROM trips_data

目前我正在重新分解我的代码,目前我有

$query="SELECT DISTINCT TRIPID FROM trips_info WHERE userid=$userid";
    $results = $dbh->query($query)->fetchAll();
        foreach ($results as $i => $row)
        {
            $iquery="SELECT COUNT(id) FROM trips_data WHERE userid=$userid AND tripid=$row[0]";
            $iiqu="SELECT COUNT(id) FROM trips_data WHERE userid=$userid AND not killcount=0 AND tripid=$row[0]";
            $irow=$dbh->query($iquery)->fetch();
            $iirow=$dbh->query($iiqu)->fetch();
            array_push($tripsdata, $row[0]);
            array_push($tripsdata, $irow[0]);
            array_push($tripsdata, $iirow[0]);
        }
我很清楚,一定有一种方法可以获得一个pdo,其中包含我需要的所有信息,而不需要在一个循环中连接多个数据库。这就是我目前所拥有的(不起作用)

我的问题是如何将GROUPBY语句添加到此类查询中

我希望得到的是

tripid points杀人, 1 5322 109, 2 83939 17

如果将任何“killcount”设置为null而不是0,则为

SELECT tripid, count(1), count(killcount) 
FROM trips_info ti, trips_data td WHERE ti.userid=? AND td.tripid=ti.tripid
GROUP BY td.tripid

我正在对您的数据库模式进行假设,但是我认为可以将其转换为一个查询

SELECT
  ti.tripid, 
  COUNT(td_a) as 'trip_count_1', 
  COUNT(tb_b) as 'trip_count_2' 
FROM
  trips_info AS ti
INNER JOIN
  trips_data AS td_a ON td_a.tripid = ti.id
INNER JOIN
  trips_data AS td_b ON td_b.tripid = ti.id AND td_b.killcount > 0
WHERE
 ti.userid = ?

谢谢你的帮助,最后我选择了另一条路,得到了这个,效果很好

SELECT  
        tripid,
        SUM(CASE WHEN killcount >0 THEN 1 ELSE 0 END) AS kills, 
        count(id) AS points 
        FROM trips_data  
        WHERE userid=$userid
        GROUP BY tripid";

您需要保留副本还是删除副本??。。组通常会删除它们。。UNION或UNION ALL可以在这里帮助您如果我运行此I get“字段列表中的未知列td_a”,我完全可以理解为什么我会出现此错误。您应该使用trips_信息加入此查询以摆脱循环。否则这种“重构”将是无用的。这个查询是否消除了循环的需要?它返回一个查询中的所有数据?此查询不是。但亚历克斯和我提出的其他问题也是如此。
SELECT  
        tripid,
        SUM(CASE WHEN killcount >0 THEN 1 ELSE 0 END) AS kills, 
        count(id) AS points 
        FROM trips_data  
        WHERE userid=$userid
        GROUP BY tripid";