[英]multiple mysql query with group by
目前我正在考虑我的代码,目前我有
$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,其中包含循环中多个数据库连接所需的所有信息。 这是我到目前为止(这是行不通的)
SELECT (
(SELECT COUNT(id) as no FROM trips_data WHERE userid=1),
(SELECT COUNT(id) as no FROM trips_data WHERE userid=1 AND not killcount=0)
) group by trips_data.tripid
我的问题是你如何在这种查询中添加group by语句?
我希望得到的是
tripid points kills,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";
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.