0

在 sql 子句中应用 LIMIT 之前,我试图找出计算记录总数(对于分页选择器)的最佳方法,让自己陷入了一些混乱。

我一直在使用 2 个查询来实现这一点,为我想要的特定视图改变 WHERE 子句。

$sqlcount = "SELECT COUNT(invnum) AS num 
FROM tblinvoices
WHERE invcustid>0 AND invstat>0 AND invdate 
BETWEEN '$startdate' AND '$enddate'

$sqlquery = "SELECT $fieldlist 
FROM tblinvoices 
INNER JOIN tblcontacts 
ON tblinvoices.invcustid = tblcontacts.ID 
WHERE invcustid>0 AND invstat>0 AND invdate 
BETWEEN '$startdate' AND '$enddate'
ORDER BY invdate
LIMIT 0,$pagerows";

我的问题是,我看到的 DATE 和 COUNT 查询以及 PAGING 的每个示例在方法上都有很大差异,我很想知道以灵活有效的方式结合这些要求的最佳方法。

我最初选择 BETWEEN 方法是为了灵活性,但许多示例(针对日期范围)使用子句,例如 -

SELECT MIN(date) AS date1, MAX(date) AS date2 FROM mytable
WHERE (MONTH(date) = (SELECT Month(MAX(date))-1 FROM mytable )
OR MONTH(date) = (SELECT Month(MAX(date))-2 FROM mytable ))
AND YEAR(date) = (SELECT YEAR(MAX(date))
FROM mytable)

我无法将这种语句与 COUNT 和 LIMIT 结合起来用于分页目的,并且不知道是否可以在一个操作中同时执行这两种操作(我已经“假定”这是不可能的,因为 LIMIT 会影响 COUNT)

任何关于满足这一共同要求的最佳方式(我认为是)的建议或示例将不胜感激。提前谢谢了。

4

1 回答 1

0

我不完全明白你在问什么 - 你是否一直同时使用这两个查询来获得计数,然后记录来匹配该计数?如果是这样,那么使用 GROUP BY 和 COUNT 的单个 SQL 语句就可以解决问题。

我的经验法则是 KISS(保持简单愚蠢),所以我个人喜欢在可能的情况下坚持使用 BETWEEN 方法,尽管总有不同的情况。我不确定您是否可以以任何方式将 DATE 和 COUNT 分开。您正在使用它选择哪些记录将在记录集中,而 COUNT 是一个聚合函数,作用于这些选定记录的组(与 GROUP BY 一起使用)。

于 2012-04-28T03:28:41.477 回答