PHP / MySQL - 计算查询中的项目

时间:2012-02-13 14:58:32

标签: php mysql database counting

我的数据库表有以下结果:

enter image description here

查询:

SELECT 
service_titles.user_id, service_titles.slide_id, service_titles.name as title_name ,service_names.name as service_name 
FROM service_names 
INNER JOIN service_titles ON service_names.title_id = service_titles.id

所以需要做的是:

  • 如果用户有2个唯一的服务标题,那么该标题的最大service_names数将 6
  • 如果用户有1个服务标题,则该标题的最大service_names数将 16

我将使用PHP进行所有编码,但我想知道如何解决这个问题。我需要一种方法来计算该用户和幻灯片的唯一service_titles数量,然后计算每个标题的服务项数。

感谢您的帮助!

3 个答案:

答案 0 :(得分:1)

SELECT COUNT(DISTINCT service_titles.name)
FROM service_names
INNER JOIN service_titles ON service_names.title_id = service_titles.id
GROUP BY service_titles.user_id, service_titles.slide_id

这将为每个user_id / slide_id组合提供不同title_names的数量。

SELECT COUNT(DISTINCT service_names.name)
FROM service_names
INNER JOIN service_titles ON service_names.title_id = service_titles.id
GROUP BY service_titles.user_id, service_titles.slide_id

...这就是相同的service_names的数量。如果您想在一个查询中同时使用这两个问题,则可以将COUNT放在一起,因为无论如何都使用相同的GROUP BY

答案 1 :(得分:0)

您可以在查询中使用CASE语句来更改service_names的最大数量。

请参阅MySQL CASE statement reference

在SQL中执行此操作比在PHP中进行评估更快。

答案 2 :(得分:0)

要计算您可以尝试多少个不同的标题:

SELECT user_id, COUNT(DISTINCT name)
FROM service_titles
GROUP BY user_id