在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)
我们非常感激地接受了这种共同要求的最佳会面方式(我认为会是什么)的任何建议或范例。非常感谢提前。
答案 0 :(得分:0)
我不完全理解你在问什么 - 你是否一直在同时使用这两个查询来计算,然后记录与那个数相匹配?如果是这样,那么使用GROUP BY和COUNT的单个SQL语句可能就可以了。
我的经验法则是KISS(Keep It Simple Stupid),所以我个人喜欢在可能的情况下坚持使用BETWEEN方法,尽管总会有其他情况需要。我不确定你是否可以以任何方式分开DATE和COUNT。你正在使用它选择哪些记录将在记录集中,COUNT是一个聚合函数,它作用于那些选定记录的组(与GROUP BY一起使用)。