我正在运行一个分类广告页面,我使用 mysql 和 php。 我的广告表的简化形式类似于:
ad id -> int
ad title -> text
ad description -> text
ad description -> text
ad type -> boolean (if 0 is a private add, if is 1 is abusiness ad)
ad op -> boolean if zero is a used item if 1 is a new item)
我想要的是获取私有(private)和公共(public)广告的数量 以及已使用和新项目的数量而不需要对数据库进行 4 次调用,这可能吗?
目前我正在调用 5 个电话,因为我每页展示 20 个广告 我对数据库的调用是:
- 使用 select * 表获取 20 个广告的数据...LIMIT 1,20
- 使用 num_rows 计算私有(private)添加的数量;
- 使用 num_rows 计算业务添加的数量;
- 使用 num_rows 计算已使用的添加数量;
- 使用 num_rows 计算新添加的数量;
是否有某种方法可以执行相同的操作,但对数据库的调用较少?
最佳答案
您可以使用 Count()
将最后 4 个点合并到一个查询中与 If()
:
SELECT
COUNT(IF (`type` = 0, id, NULL)) AS private_ads_count,
COUNT(IF (`type` = 1, id, NULL)) AS business_ads_count,
COUNT(IF (`op` = 0, id, NULL)) AS used_ads_count,
COUNT(IF (`op` = 1, id, NULL)) AS new_ads_count
FROM ads_table
SELECT
SUM(IF (`type` = 0, 1, 0)) AS private_ads_count,
SUM(IF (`type` = 1, 1, 0)) AS business_ads_count,
SUM(IF (`op` = 0, 1, 0)) AS used_ads_count,
SUM(IF (`op` = 1, 1, 0)) AS new_ads_count
FROM ads_table
请注意,type
是 Reserved Keyword ,所以我们需要在它周围使用反引号(`)。
关于php - 访问mysql数据库为网站提取多个数据的最有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52644761/