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

时间:2011-06-30 00:17:21

标签: mysql

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

id,reference,customerId。

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

id,Name,Country ..例如

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

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

我首先想到应该如何做,我可以将国家添加到enquiryTable。问题解决了,但其他人是否有人建议如何做到这一点?因为我不喜欢每次更改联系的国家时都必须更新每个查询的想法。

提前致谢!

1 个答案:

答案 0 :(得分:1)

在我看来,这些数据应该分布在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(*)查询。你还没有提到你有什么编程语言或数据访问策略,因此很难对计数更有帮助。如果您没有简单的方法从代码的数据访问层中确定行计数,那么您可以使用带有输出参数的存储过程来为您提供行计数,而无需两次往返数据库。这完全取决于您的架构,数据访问策略以及您与数据库的距离。