如何计算狮身人面像的结果?

时间:2011-04-19 09:02:47

标签: php mysql count sphinx

我必须处理有很多结果的查询,但我只会以20-30行的形式显示它们。

然后我使用php API中的SetLimits()方法。

但我需要知道结果总数是多少,以计算页数(或结果集)

我现在能做到这一点的唯一方法就是通过将限制设置为10000000来查看所有结果,并查看sphinx返回的数组的“total”键中的内容,但这并不好,因为我只需要count()数字,我不会用sphinx来创建一个包含所有id的巨大数组。

在mysql中执行select..count()查询将不起作用,因为sphinx中的索引数据总是不同。

有什么想法吗?

3 个答案:

答案 0 :(得分:4)

根据手册:SphinxClient::setLimits

这应该可以解决问题

  $cl->SetLimits(0,0);

我不是Sphinx的开发者,所以这只是一个盲目的猜测......它应该避免记忆 溢出了大量的结果。

让我知道它是否有效,所以如果不正确,我可以删除答案。

我还发现SELECT..COUNT()在Sphinx查询中不起作用,所以你说得对。

此外,根据Sphinx文档,您可以使用SHOW META查询来检索结果数。

SHOW META

SHOW META 会显示有关最新查询的其他元信息,例如查询时间和关键字统计信息:

mysql> SELECT * FROM test1 WHERE MATCH('test|one|two');
+------+--------+----------+------------+
| id   | weight | group_id | date_added |
+------+--------+----------+------------+
|    1 |   3563 |      456 | 1231721236 |
|    2 |   2563 |      123 | 1231721236 |
|    4 |   1480 |        2 | 1231721236 |
+------+--------+----------+------------+
3 rows in set (0.01 sec)

mysql> SHOW META;
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| total         | 3     |
| total_found   | 3     |
| time          | 0.005 |
| keyword[0]    | test  |
| docs[0]       | 3     |
| hits[0]       | 5     |
| keyword[1]    | one   |
| docs[1]       | 1     |
| hits[1]       | 2     |
| keyword[2]    | two   |
| docs[2]       | 1     |
| hits[2]       | 2     |
+---------------+-------+
12 rows in set (0.00 sec)

<强>参考文献:

答案 1 :(得分:4)

SphinxClient:query不返回与您的请求匹配的记录数据吗?

“total”是此请求返回的条目数(受SetLimit影响),total_found是匹配查询的结果总数(不受SetLimit影响),正如我所理解的那样。

答案 2 :(得分:1)

SELECT VARIABLE_NAME, VARIABLE_VALUE
FROM information_schema.GLOBAL_STATUS WHERE
VARIABLE_NAME LIKE 'SPHINX_TOTAL_FOUND';

了解更多信息

SELECT VARIABLE_NAME, VARIABLE_VALUE
FROM information_schema.GLOBAL_STATUS WHERE
VARIABLE_NAME LIKE 'SPHINX_%';