php—访问mysql数据库的最有效方法,为网站提取多个数据

d7v8vwbk  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(266)

我正在运行一个分类广告页面,我正在使用php的mysql。我的ads表是一个简化的形式,类似于:

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)

我想知道的是,在不打4个电话到数据库的情况下,获得私人和公共广告的数量,以及旧的和新的项目的数量,这是可能的吗?
现在我打了5个电话,因为我每页显示20个广告,我对数据库的电话是:
使用select*table….获取20个广告的数据。。。。限值1,20
使用num\u行计算私有添加的数量;
使用num\u行计算业务添加的数量;
使用num\u行计算已使用的加法数;
使用num\u行计算新添加的数量;
是否有一些方法可以做到同样的效果,但对数据库的调用较少?

r1zk6ea1

r1zk6ea11#

您可以使用将最后4个点合并到一个查询中 Count()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

另一种方法是使用 SUM() 函数 IF() :

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 是一个保留关键字,所以我们需要在它周围使用反勾号(`)。

相关问题