SQL_CALC_FOUND_ROWS可以使用1而不是星号吗?

时间:2018-05-07 08:16:33

标签: mysql sql

这是我的问题:

SELECT t1.mycol
FROM mytable t1
JOIN mytable t2
ON t1.id = t2.postid
ORDER BY value
LIMIT 10;

效果很好。

现在我需要计算匹配行数而不受限制。所以我已将SQL_CALC_FOUND_ROWS *添加到select语句中,并且我的查询会抛出:

  {p> valueorder by子句中含糊不清

为什么呢?我该如何解决?

注意到,当我在SQL_CALC_FOUND_ROWS 1声明中使用SQL_CALC_FOUND_ROWS *代替select时,显然一切都很好。那么,使用SQL_CALC_FOUND_ROWS 1是否可以? (我问这个,因为文档中的SQL_CALC_FOUND_ROWS *。)

3 个答案:

答案 0 :(得分:1)

试一试:

SELECT SQL_CALC_FOUND_ROWS * from mytable t1
JOIN mytable t2
ON t1.id = t2.postid
ORDER BY t1.value
LIMIT 10;
SELECT FOUND_ROWS();

你得到错误的原因是,你正在自己加入表,所以很明显,每列都会出现两次。这就是为什么这个名字含糊不清的原因。我添加了quelifier t1

答案 1 :(得分:1)

我不确定你为什么使用自我加入,但是你说查询可以做你想要的。

您的问题只是order by中缺少合格的列名。它与SQL_CALC_FOUND_ROWS无关:

SELECT SQL_CALC_FOUND_ROWS t1.mycol
FROM mytable t1 JOIN
     mytable t2
     ON t1.id = t2.postid
ORDER BY t1.value
LIMIT 10;

我不知道为什么你的原始查询会起作用。它在ORDER BY中具有相同的不明确的列名。

答案 2 :(得分:0)

试试这个

SELECT SQL_CALC_FOUND_ROWS t1.* from mytable t1
JOIN mytable t2
ON t1.id = t2.postid
ORDER BY t1.value
LIMIT 10;

SELECT FOUND_ROWS();