Takže pokud chápu dobře, tak cnt je ve výsledku kolkrát se tam daná ip nacházi (ve výběru 0-50000)...
Takže to asi nefunguje, protože když jsem si na svojí testovací tabulku dal limit 0-300, tak stejně tam byl jeden záznam 1300krát a pod...
ALE: Toto funguje (jen nevím, jak moc je to náročné):
Kód: Vybrat vše
SELECT ip, COUNT( ip ) AS pocet_vyskytu FROM tabulka WHERE id > ( SELECT max( id ) - pocet_od_konce FROM tabulka ) GROUP BY ip ORDER BY pocet_vyskytu DESC
Edit: Tak jsem to hodil do php a před dotaz do dbs jsem dal $start = microtime(true); a hned za dotaz jsem dal $stop = microtime(true); a vypis $stop-$start mi dal výsledek
1.7153949737549, přičemž hodnota "pocet_od_konce" byla 50 000...
Edit2: Když odeberu řazení (order by), tak se vysledek zlepší na
1.2085599899292
Edit3: Tak jsem to zkusil dát "pocet_od_konce" na 100 000 a když nechám order by, tak:
dotaz na dbs: 2.7618110179901
zpracovani php po dotazu: 0.0084078311920166
celkový čas:
2.7702429294586
Když smažu order by a necham na php zjištění která ip přesahuje limit, tak:
dotaz na dbs: 2.484915971756
zpracovani php po dotazu: 0.033513069152832
celkový čas:
2.5184440612793
Ale je pravda, že dbs je na hostingu a já se k ní připojuji z mého localhostu...+právě naše stránky prohlíží několik stovek lidí...Takže teď přemýšlím, zda nechat order by a nezatěžovat php, nebo naopak...