在一个查询中计算两个字段的问题

Mac*_*lor 4 php mysql

伙计们,我需要从桌子上计算新的私人信息和旧信息

所以首先想到的是使用mysql_num_rows和简单的事情

  // check new pms
  $user_id  = $userinfo['user_id'];
  $sql = "SELECT author_id  FROM bb3privmsgs_to WHERE user_id='$user_id' AND (pm_new='1' OR  pm_unread='1')";
  $result = $db->sql_query($sql) ;
  $new_pms = $db->sql_numrows($result);
  $db->sql_freeresult($result);

  // check old pms
  $sql = "SELECT author_id  FROM bb3privmsgs_to WHERE user_id='$user_id' AND (pm_new='0' OR  pm_unread='0')";
  $result = $db->sql_query($sql) ;
  $old_pms = $db->sql_numrows($result);
  $db->sql_freeresult($result);
Run Code Online (Sandbox Code Playgroud)

但是我怎么能在一个陈述和更短的行中计算这两个字段?〜

Mar*_*tos 5

请改用此查询:

SELECT SUM(CASE WHEN pm_new = '1' OR pm_unread = '1' THEN 1 ELSE 0 END) AS new_pms,
       SUM(CASE WHEN pm_new = '0' OR pm_unread = '0' THEN 1 ELSE 0 END) AS old_pms
  FROM bb3privmsgs_to
 WHERE user_id='$user_id'
Run Code Online (Sandbox Code Playgroud)

这是一个特定于MySQL的版本,读得更干净:

SELECT COUNT(IF(pm_new = '1' OR pm_unread = '1', 1, NULL)) AS new_pms,
       COUNT(IF(pm_new = '0' OR pm_unread = '0', 1, NULL)) AS old_pms
  FROM bb3privmsgs_to
 WHERE user_id='$user_id'
Run Code Online (Sandbox Code Playgroud)