1

1つのクエリの条件に基づいて、アップグレードされたユーザーまたは標準のユーザーをusers['upgraded']またはusers['standard']変数にカウントしたいと思います。私はmysqlとPDOを使用しています。「id」は主キーです

このようなもの:

$user[upgraded] =

SELECT COUNT(*)
FROM users
AS upgraded
WHERE (status1 > 0 OR status2 > 0 OR status3 > 0)
AND upgraded = 1
AND paused = 0
AND timestamp < $timestamp
ORDER BY id DESC

$user[standard] =

SELECT COUNT(*)
FROM users
AS standard
WHERE (status1 > 0 OR status2 > 0 OR status3 > 0)
AND upgraded = 0
AND paused = 0
AND timestamp < $timestamp
ORDER BY id DESC

これを1つのクエリで取得するにはどうすればよいですか?助けていただければ幸いです!

4

2 に答える 2

3

MySQLブール演算、そしてこれが可能な限り最短の答えだと思います

SELECT  SUM(upgraded = 1) upgraded,
        SUM(upgraded = 0) downgraded
FROM    users
WHERE   (status1 > 0 OR status2 > 0 OR status3 > 0) AND 
        paused = 0  AND 
        timestamp < $timestamp

ただし、よりRDBMSに対応したい場合は、CASE

SELECT  SUM(CASE WHEN upgraded = 1 THEN 1 ELSE 0 END) upgraded,
        SUM(CASE WHEN upgraded = 0 THEN 1 ELSE 0 END) downgraded
FROM    users
WHERE   (status1 > 0 OR status2 > 0 OR status3 > 0) AND 
        paused = 0  AND 
        timestamp < $timestamp
于 2013-03-26T14:58:40.190 に答える
1
select sum(if(upgraded=1,1,0)) as upgraded,
       sum(if(upgraded=0,1,0) as standard from users
  where  etc.
于 2013-03-26T15:00:30.897 に答える