mysql - 在 mySQL 复杂表中计算行数的最佳方法是什么

标签 mysql

我有一个包含以下字段的表(例如);

ID、引用号、客户 ID。

现在,我经常想记录客户的查询。但是,在某些情况下,我需要根据客户所在的国家/地区过滤查询...位于客户表中。

ID、名称、国家/地区...例如

目前,我的应用程序每页显示 15 个查询,我正在选择所有查询,并针对每个查询,根据 customerId 检查 customerTable 中的国家/地区字段以过滤国家/地区。我也会通过这种方式统计查询数量,以找出查询总数并能够显示页面(第 1 页,共 4 页)。

随着数据库的增长,我开始注意到有点滞后,我认为我的方法有点缺陷!

我对如何完成此操作的第一个猜测是我可以将国家/地区添加到查询表中。问题已解决,但其他人是否有关于如何完成此操作的建议?因为我不喜欢每次联系人所在国家/地区发生更改时都必须更新每个查询的想法。

提前致谢!

最佳答案

在我看来,这些数据应该分布在 3 个表中

客户 查询 国家/地区

然后,通过使用联接,您可以调出客户和国家/地区数据并按其中任一数据进行筛选。类似......

SELECT 
enquiries.enquiryid,
enquiries.enquiredetails,
customers.customerid,
customers.reference,
customers.countryid,
countries.name AS countryname
FROM
enquiries
INNER JOIN customers ON enquiries.customerid = customers.customerid
INNER JOIN countries ON customers.countryid = countries.countryid
WHERE countries.name='United Kingdom'

您绝对应该只接触数据库一次来执行此操作。

根据您访问数据的方式,您也许无需发出第二个 COUNT(*) 查询即可获取行计数。您还没有提到您使用哪种编程语言或数据访问策略来对计数提供更多帮助。如果您没有简单的方法从代码的数据访问层中确定行计数,那么您可以使用带有输出参数的存储过程来提供行计数,而无需对数据库进行两次往返。这完全取决于您的架构、数据访问策略以及您与数据库的距离。

关于mysql - 在 mySQL 复杂表中计算行数的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6528719/

相关文章:

mysql - mysql 内连接多个表

mysql - SELECT 如果一行中的 2 个单元格相等

mysql - 使用相同值类型的 2 列之间的比较对 MySQL 结果集进行排序

php - 时段系统设计

php - 使用 PDO 插入两行而不是一个 MySQL

php - 查询在 PHPMyAdmin 中有效,但在 PHP 中无效

mysql - 如何关联两个单独表中的数据

php - 成功插入单行后 $mysqli->info 为空

c# - 在 Visual Studio Ultimate 2010 中添加 MySQL.Data 作为引用

Mysql:依赖于列的 COUNT() 的 WHERE 语句?