我确信这可能会被复制,但我不能在我的生活中弄清楚SQL查询中发生了什么。目前我正在运行两个单独的查询1)。收集我想要的表格内容和2)。运行相同的查询只是计算...
首先,它是postgres。在查询中,它是由限制条款分页的,所以我认为我的开始不好,但我问一个愚蠢的问题已经可能已经承诺了。
SELECT *
FROM test_case_versions v
INNER JOIN test_cases t ON v.version_id = t.current_version
LEFT OUTER JOIN categories_full c ON c.category_id = t.category_id
INNER JOIN test_case_labels tcl ON tcl.test_case_id = t.test_case_id
INNER JOIN labels l on l.label_id = tcl.label_id
WHERE c.product_id = " . $user->product_id . "
AND label_name ILIKE '$search2'
ORDER BY t.test_case_id ASC
LIMIT " . SEARCH_RESULTS_PER_PAGE . " OFFSET $offset";
因此该声明会给我一个result_set,但由于下面的限制条款,我只能将100个结果交给15000。 有没有办法在我运行我的限制条款来计算总结果之前,或者这是不可能的?
非常感谢任何帮助
答案 0 :(得分:3)
这样的事情可能有用。
SELECT *
FROM (SELECT v.*,
t.*,
c.*,
tcl.*,
l.*,
COUNT(*) OVER() AS cnt
FROM test_case_versions v
INNER
JOIN test_cases t
ON v.version_id = t.current_version
LEFT
JOIN categories_full c
ON c.category_id = t.category_id
INNER
JOIN test_case_labels tcl
ON tcl.test_case_id = t.test_case_id
INNER
JOIN labels l
ON l.label_id = tcl.label_id
WHERE c.product_id = " . $user->product_id . "
AND label_name ILIKE '$search2'
) AS TMP
ORDER
BY test_case_id ASC
LIMIT " . SEARCH_RESULTS_PER_PAGE . " OFFSET $offset";
答案 1 :(得分:2)
我得到了很多这个问题,我的答案总是一样的:你为什么要知道行的确切数量?当你在Google中查找某些内容时,你是否看过点击次数,如果你这样做,你认为这是一个确切的数字吗? 分页结果的全部目的是限制服务器(以及网络)的负担,如果你对所有记录进行计数,就会失去这种目的。