我有一个"项目"表和一个"项密钥"表.当用户搜索关键字时,我想给他一页结果加上结果总数.
我目前正在做的是(对于搜索"ab c"的用户:
SELECT DISTINCT {fields I want} FROM itemkeywords JOIN items WHERE (keyword = 'a' or keyword='b' or keyword='c' ORDER BY "my magic criteria" LIMIT 20.10
然后我用计数做同样的查询
SELECT COUNT(*) FROM itemkeywords JOIN items WHERE (keyword = 'a' or keyword='b' or keyword='c'
这可能会得到一个相当大的表,我认为这个解决方案非常
糟糕... 但我想不出更好的东西.
避免两次点击MySQL的明显替代方案,即只进行第一次查询,没有LIMIT子句,然后导航到正确的记录以显示相应的页面,然后到记录集的末尾以便计算结果似乎更糟...
有任何想法吗?
注意:我使用的是ASP.Net和MySQL,而不是PHP
在有限选择中选择后添加SQL_CALC_FOUND_ROWS,然后在第一次选择完成后执行"SELECT FOUND_ROWS()".
例:
mysql> SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name -> WHERE id > 100 LIMIT 10; mysql> SELECT FOUND_ROWS();