Php mysql优化类别中的广告数量

Php mysql优化类别中的广告数量,php,mysql,Php,Mysql,我有一个个人广告网站 第一个问题:我有两个表,category和ads Category表(id是主键) Adstable(id是主键)-这个表有很多Ads | id | title | type | subtype| +-----+-------------+-----------+--------+ | 1 | some text | sell | cars | | 2 | some text | dating | girls |

我有一个个人广告网站

第一个问题:我有两个表,
category
ads

Category
表(
id
是主键)

Ads
table(
id
是主键)-这个表有很多Ads

| id  | title       | type      | subtype|
+-----+-------------+-----------+--------+
| 1   | some text   | sell      | cars   |
| 2   | some text   | dating    | girls  |
| 3   | some text   | dating    | boys   |
我想阅读所有类别类型,并获得该类型的广告总数,我还需要获得子类型

我的页面上的输出将是

Sell (1 ads)
   Cars

Jobs (0 ads)
   Teacher

Dating (2 ads)
  Boys
  Girls
我目前正在做的是使用php和mysql进行3次查询,第一次查询返回的类别类型是select where subtype=“”,第二次查询这些类别中的现有广告,第三次查询为每种类型提供子类型,我想优化mysql,减少查询数量并加快速度,即使这意味着更改表和添加更多索引

选择查询:

select * 
from category  
where subtype = '' 
order by pos desc
计算类型上的广告数量:

select type 
from ads 
where type = '$type_name'
选择子类型:

select * 
from category  
where type = '$type_name' 
  and subtype !='' 
order by pos
你可以用这个

SELECT c.*,a.c_ads
FROM
category c LEFT JOIN ( SELECT COUNt(type) c_ads,type FROM ads GROUP BY type) a
ON c.type = a.type
ORDER BY c.type,c.pos DESC
id |类型|子类型| pos | c|ads -: | :----- | :------ | --: | ----: 3 |约会| 3 | 2 5 |约会|女孩| 2 | 2 4 |约会|男孩| 1 | 2 2 |工作| | 2 |零 5 |工作|教师| 1 |无效 1 |出售| 1 | 1 5 |出售|汽车| 1 | 1

当您在php中获得数据时,请逐行检查,如果类型发生变化,那么您可以使用列c_ads来显示($row{'c_ads']ads)和行['type']来显示类别的文本

如果第['type']行未更改,则可以在第['subtype']行中找到第['type']行的子类别。

您可以使用此

SELECT c.*,a.c_ads
FROM
category c LEFT JOIN ( SELECT COUNt(type) c_ads,type FROM ads GROUP BY type) a
ON c.type = a.type
ORDER BY c.type,c.pos DESC
id |类型|子类型| pos | c|ads -: | :----- | :------ | --: | ----: 3 |约会| 3 | 2 5 |约会|女孩| 2 | 2 4 |约会|男孩| 1 | 2 2 |工作| | 2 |零 5 |工作|教师| 1 |无效 1 |出售| 1 | 1 5 |出售|汽车| 1 | 1

当您在php中获得数据时,请逐行检查,如果类型发生变化,那么您可以使用列c_ads来显示($row{'c_ads']ads)和行['type']来显示类别的文本


如果第['type']行未更改,则您可以在第['subtype']行中找到第['type']行的子类别

请显示您的现有查询。使用
COUNT(*)和
分组方式
。请显示您的现有查询。使用
COUNT(*)
分组方式
。这是有效的,但这是在计算每个子类型中的广告数量吗?如果是,这不是很有效,因为我只需要计算每种新类型的广告一次。不,它显示了你在示例中看到的每种类型的广告数量。约会有c_广告2,因为BY有1,女孩也有1。c_广告的数字重复I因为在c.type=a.type上,上面的表格只是一个内部表格,你和我是唯一会看到它的人。你现在的工作是将它放入php代码中,并根据需要对数据进行分解。你能做的事情我在答案中做了描述。在小提琴中使用Select添加数据,看看它做了什么。然后ild你的html页面工作正常,但这是在计算每个子类型中的广告数量吗?如果是,这不是很有效,因为我只需要计算每种新类型的广告一次否,它显示的是每种类型的广告数量a你可以在示例中看到约会有c_广告2,因为BY有1,女孩也有1。c_广告的数字在每个子类型中重复子类型,。因为在c.type=a.type上,上面的表只是一个内部表,您和我是唯一一个会看到它的人。您现在的工作是将其放入php代码中,并根据需要对数据进行分解。您可以做什么我在答案中进行了描述。在小提琴中使用Select添加数据并查看它的功能。然后构建您的html pa通用电气 id | type | subtype | pos | c_ads -: | :----- | :------ | --: | ----: 3 | dating | | 3 | 2 5 | dating | girls | 2 | 2 4 | dating | boys | 1 | 2 2 | jobs | | 2 | null 5 | jobs | teacher | 1 | null 1 | sell | | 1 | 1 5 | sell | cars | 1 | 1