Co chcę zrobić, to SUMA kolumna, ale także COUNT liczbę zsumowanych wierszy, z limitem nie więcej niż 5 wierszy. Więc moje zapytanie jest:LICZBA MySQL z LIMITEM
SELECT COUNT(*), SUM(score) FROM answers WHERE user=1 LIMIT 5
czego się spodziewałem z powrotem był COUNT (*) do 5 (nie mogę po prostu założyć, że zawsze będzie na 5 w moim kodu logiki, jak to może mieć mniej niż 5 odpowiedzi), z suma wyniku w liczbie od do 5 rzędów.
Zamiast tego, wydaje się, że wracam, to całkowita liczba pasujących wierszy (gdzie użytkownik jest 1) jako liczba i suma wyniku dla tych wierszy. Liczby nie zmieniaj czy mogę umieścić graniczna 1 lub ograniczyć 5 lub nawet ograniczyć 50.
co wierzę będzie działać w tej sytuacji jest to zamiast
SELECT COUNT(*), SUM(score) FROM (SELECT * FROM answers WHERE user=1 LIMIT 5) AS a
Ale to wydaje się trochę zawiłe dla takiego prostego zapytania , a ponieważ jest w scenariuszu o dużym natężeniu ruchu, nie powinien być tak wydajny, jak to tylko możliwe.
Czy brakuje mi czegoś? Znalazłem ten raport o błędzie sprzed kilku lat, który wydaje się być związany z tym "problemem" http://bugs.mysql.com/bug.php?id=50005, ale zakładam, że to nie jest błąd?
'LIMIT 5' zwróci najwyżej 5 wierszy. 'SELECT COUNT (*), SUM (score) FROM answers' zwróci 1 wiersz. 1 <5. Masz poprawność w drugim zapytaniu. –
Yep @ ta.speot.is, myślę, że potrzebowałem kogoś do zweryfikowania, że nie robiłem czegoś głupiego. Mogłem przysiąc, że było prostsze zapytanie, żeby zrobić to, czego potrzebowałem, ale oczywiście nie. – Lee
użycie 'select 1' zamiast' select * 'w zapytaniu zagnieżdżonym może teoretycznie doprowadzić do zmniejszenia użycia pamięci –