【发布时间】:2017-03-10 22:42:03
【问题描述】:
我遇到了 MYSQL 的问题。 SQL_CALC_FOUND_ROWS 和 FOUND_ROWS() 无法正常工作。
问题:
- 第一次总回报1
- 第二次总返回正确 数量 3,500
MYSQL 版本:
mysql Ver 14.14 Distrib 5.7.10,适用于 osx10.9 (x86_64),使用 EditLine 包装器
我正在尝试从表中返回一个列表,并且该列表中的另一列将针对每一行重复。 (包含选择的总行数)。
这样我可以一次选择获得所有数据和总行数...
选择如下。
SELECT SQL_NO_CACHE SQL_CALC_FOUND_ROWS * FROM
(SELECT A.MEMBER_ID, A.USERNAME, B.ZIP, B.INTERESTS, C.ADDRESS
FROM MEMBER A, DATA B, ADDRESS C
WHERE A.GENDER = "F"
AND A.MEMBER_ID = B.MEMBER_ID
AND A.MEMBER_ID = C.MEMBER_ID
AND UPPER (A.CANCEL_FLAG) = "N"
ORDER BY A.LAST_LOGIN_DATE DESC ) res,
(select FOUND_ROWS() as "total_result" from dual ) tot
Limit 1, 15
【问题讨论】:
-
1.) ORDER BY 在内部 SELECT 处是否正确,还是应该在 ORDER BY 之前结束“)”? 2.) 你有更多关于表类型和结构的信息吗?
-
为什么它需要在 ORDER BY 之前关闭")"? 2.) ??表是基本表。我不认为他们有什么特别之处。我只是想从表中返回一个列表和另一列,它将为每一行重复......包含总行......这样我可以在一次选择中获取所有数据和总行......
-
select FOUND_ROWS()告诉您最后一次选择找到的行数,而不是当前选择。所以你看到的是预期的结果。 -
ok.. 那么如何通过当前选择获得 found_rows() 呢?我刚刚从 Oracle 迁移,它曾经工作得很好。我想一次选择我的数据和行数。
-
好的,明白了,您希望 SQL_CALC_FOUND_ROWS 的结果与您的数据在相同的结果中,并且您希望在每一行中都有“total_result”。不确定这是否可以使用 MySQL。我们总是使用两个不同的查询。您可以尝试使用“UNION”,但将“total_result”放在结果行中,而不是列中。