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