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

标签 php mysql

我正在运行一个分类广告页面,我使用 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 个广告 我对数据库的调用是:

  1. 使用 select * 表获取 20 个广告的数据...LIMIT 1,20
  2. 使用 num_rows 计算私有(private)添加的数量;
  3. 使用 num_rows 计算业务添加的数量;
  4. 使用 num_rows 计算已使用的添加数量;
  5. 使用 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

替代方法是使用 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

请注意typeReserved Keyword ,所以我们需要在它周围使用反引号(`)。

关于php - 访问mysql数据库为网站提取多个数据的最有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52644761/

相关文章:

php - Laravel:如何将值从表单传递到 Controller ?

MySQL:可以在存储过程的更新中使用内部联接吗?

sql - 从三个不同的表获取所有值.. JOIN 问题?

php - 没有索引导出/导入 5000 万行数据库?

php - Phar 存档中的 SQLite 数据库

javascript - LocalStorage 或 PHP Sessions 哪个更持久?

mysql - WampServer mySQL

php - 为什么这个 PHP 脚本实际上没有向数据库中添加行?

mysql - 两个外键字段,恰好一个被设置为一个值,另一个在MySQL数据库的django模型中为null

php - 我如何在 codeigniter 中运行 mysql 转储文件