这是我的问题:
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>value
在order by
子句中含糊不清。
为什么呢?我该如何解决?
注意到,当我在SQL_CALC_FOUND_ROWS 1
声明中使用SQL_CALC_FOUND_ROWS *
代替select
时,显然一切都很好。那么,使用SQL_CALC_FOUND_ROWS 1
是否可以? (我问这个,因为文档中的SQL_CALC_FOUND_ROWS *
。)
答案 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();