Vinnaren i pepparkakshustävlingen!
2013-06-02, 20:18
  #1
Medlem
Tjena.
Har stött på ett konstigt problem. När jag kör min query och använder LIMIT ITEM, ITEM_PER_RESULT så blir det totala resultatet olika när jag kommer över en viss siffra.

Så här ser min query ut:

Kod:
SELECT SQL_CALC_FOUND_ROWS *,
MATCH(TW,CY,RCAGAINST(:where IN BOOLEAN MODE) AS relevance_where,
MATCH(TI,PC,IA,AUAGAINST (:what IN BOOLEAN MODE) AS relevance_what
FROM tender
WHERE MATCH
(TI,PC,RC,CY,IA,TW,AUAGAINST(CONCAT(:where,:whatIN BOOLEAN MODE)
ORDER BY (relevance_what+relevance_whereDESC
LIMIT $curr_item
,$_item_per_page 

Så här uppdateras $curr_item och $_item_per_page

Kod:
//counting page and record
if ($_page == 1){
    
$curr_item 0;
}else{
    
$curr_item = ($_page*$_item_per_page)-$_item_per_page;


Med andra ord, om page = 1, då är $curr_item 0 och jag hämtar alltid 15 items per page.

Om page är 2 då blir resultatet för LIMIT ((2*15)-15) = 15.
På det här sättet så skapar jag min paging.

Genom att använda SQL_CALC_FOUND_ROWS och en extra query:

Kod:
SELECT FOUND_ROWS() AS `nr_rows

får jag ut antal items som totalt matchar sökkreterierna. Som exempel 2000. Jag tar då (2000/15) för att få fram antal sidor som skall finnas. Det konstiga är nu att när jag bläddrar till exempel sida 100 / 160, helt plötsligt så får jag ut ett annat max resultat (exempel 1200) och då är jag på sista sidan helt plötligt.

Hur är detta möjligt? Varför blir det olika resultat när jag använder LIMIT?

Kör mysql 5.6, innodb engine med fulltext search.

PS:

Om jag ändå väljer att gå till den ursprungliga "sista sidan" så finns det fortfarande resultat.
Jag kan välja att backa bakåt direkt från sista sidan och det finns resultat hela tiden.
Det ända som händer är att den totala itemet minskar hela tiden tills att ja kommer till sida 100.

Konstigt som fan
__________________
Senast redigerad av newone 2013-06-02 kl. 20:32.
Citera
2013-06-02, 20:44
  #2
Medlem
Intressant. Verkar vara en bug i mysql.
Nu vet ni det om ni stöter på det.

http://bugs.mysql.com/bug.php?id=68458
Citera
2013-06-03, 08:18
  #3
Moderator
Protons avatar
SQL_CALC_FOUND_ROWS ger dig mig veterligen endast ett estimat på resultatets storlek om frågan hade varit utan LIMIT, inte det faktiska antalet rader.
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback