Dokumentacja MySQL na Instrukcje kontroli przepływu powiedz:
Dokumentacja przechowywane programy i widoki powiedz:
Wygląda więc na to, że możesz uruchomić wyraźną pętlę tylko w ramach procedury składowanej, funkcji lub wyzwalacza.
W zależności od tego, co robisz w instrukcji SQL, dopuszczalne może być użycie tabeli (lub widoku) liczb (Tworzenie "Tabeli liczb" w mysql , MYSQL:Tabela numerów sekwencyjnych ).
Jeśli Twoje zapytanie to SELECT
i można zwrócić wynik twojego SELECT
10 razy w przypadku jednego długiego zestawu wyników (w przeciwieństwie do 10 oddzielnych zestawów wyników) możesz zrobić coś takiego:
SELECT MainQuery.*
FROM
(
SELECT 1 AS Number
UNION ALL SELECT 2
UNION ALL SELECT 3
UNION ALL SELECT 4
UNION ALL SELECT 5
UNION ALL SELECT 6
UNION ALL SELECT 7
UNION ALL SELECT 8
UNION ALL SELECT 9
UNION ALL SELECT 10
) AS Numbers
CROSS JOIN
(
SELECT 'some data' AS Result
) AS MainQuery
Przykład INSERT
Polecam mieć w swojej bazie stałą tabelę liczb. Przydaje się w wielu przypadkach. Zobacz powyższe linki, jak je wygenerować.
Tak więc, jeśli masz tabelę Numbers
z int
kolumna Number
z wartościami od 1 do powiedzmy 100K (tak jak ja) i kluczem podstawowym w tej kolumnie, a następnie zamiast tej pętli:
DECLARE count INT DEFAULT 0;
WHILE count < 10 DO
INSERT INTO table_name(col1,col2,col3)
VALUES("val1","val2",count);
SET count = count + 1;
END WHILE;
możesz napisać:
INSERT INTO table_name(col1,col2,col3)
SELECT ("val1", "val2", Numbers.Number-1)
FROM Numbers
WHERE Numbers.Number <= 10;
Będzie również działać prawie 10 razy szybciej.