分组在php中构建一个报告

时间:2014-02-14 11:36:08

标签: php mysql

我有一个表 USER ,其中包含以下列

id,name 

和另一个表列出,其中包含以下列。

list_id,user_id,type

LISTING表有一个用户的多条记录。我使用php运行以下查询来获取每个用户的列表。

SELECT 
      USER.ID AS ID,
       NAME,
      TYPE (TYPE can be A or B)
   FROM
  USER,
  LISTING 
WHERE 
  LISTING.USER_ID = USER.ID 
  GROUP BY USER.ID
ORDER BY USER.ID DESC 

现在,问题是如果USER在LISTING表中有TYPE a和b的条目,我想在报告中显示“BOTH”,如果没有类型b的USER的条目,则只有A,等等。 / p>

请帮助!!

数据:

USER

+---+------
|id | name| 
+---+------
| 1 | jamy| 
| 2 | jazz|
| 3 |leo  | 
+---+-------

列出

+---+------------+--------+
| id| user_id    |type    |
+---+------------+--------+
| 1 | 1          | A      |
| 2 | 2          | A      |
| 3 | 2          | B      |
| 4 | 3          | B      |
| 5 | 1          | A      |
+---+------------+-------+

现在我想要的报告是:

+---+------------+
|NAME| TYPE      |
+---+------------+
|JAMY| ONLY A    | 
|JAZZ| BOTH      | 
|LEO | ONLY B    | 
+---+------------+

2 个答案:

答案 0 :(得分:0)

此处case语句可能非常有用,以及一些正确的join

SELECT
  USER.ID AS ID,
  NAME,
  CASE
    WHEN X.USER_ID IS NOT NULL AND Y.USER_ID IS NOT NULL THEN 'BOTH'
    WHEN X.USER_ID IS NOT NULL THEN 'ONLY A'
    WHEN Y.USER_ID IS NOT NULL THEN 'ONLY B'
    ELSE 'NEITHER'
  END AS TYPE
FROM USER
LEFT JOIN LISTING AS X ON X.USER_ID=USER.ID AND X.TYPE='A'
LEFT JOIN LISTING AS Y ON Y.USER_ID=USER.ID AND Y.TYPE='B'
ORDER BY USER.ID DESC

答案 1 :(得分:0)

您可能需要LEFT JOIN

  SELECT 
  USER.ID AS ID,
  NAME,
  TYPE 
  FROM USER LEFT JOIN LISTING 
  ON LISTING.USER_ID = USER.ID
  GROUP BY USER.ID
  ORDER BY USER.ID DESC 
相关问题