Diese Lösung führt eine kumulative Summe durch und stoppt, wenn die Summe 1000 überschreitet:
SELECT NULL AS users_count, NULL AS total
FROM dual
WHERE (@total := 0)
UNION
SELECT users_count, @total := @total + users_count AS total
FROM messages_queue
WHERE @total < 1000;
Das heißt, wenn Sie zwei Werte von beispielsweise 800 haben, ist die Gesamtsumme 1600. Das erste SELECT dient lediglich dazu, @total
zu initialisieren Variable.
Wenn Sie verhindern möchten, dass die Summe 1000 überschreitet, außer in Fällen, in denen eine einzelne Zeile einen Wert von mehr als 1000 hat, dann denke ich, dass dies funktioniert, obwohl Sie es einigen strengen Tests unterziehen müssen:
SELECT NULL AS users_count, NULL AS total, NULL AS found
FROM dual
WHERE (@total := 0 OR @found := 0)
UNION
SELECT users_count, @total AS total, @found := 1 AS found
FROM messages_queue
WHERE (@total := @total + users_count)
AND @total < 1000
UNION
SELECT users_count, users_count AS total, 0 AS found
FROM messages_queue
WHERE IF(@found = 0, @found := 1, 0);