Ваш запрос правильно оформлен.
Это не имеет значения, так как в любом случае он возвращает только одну строку при каждом вызове.
Ваш foreach вызывает его несколько раз, и порядок влияет только на фактический вызов базы данных. Следовательно, общий порядок результатов - это порядок каждого foreach.
Если бы foreach передал параметр, который идентифицировал более одной строки, то в каждом из этих вызовов порядок был бы по уровню (например, если вы выполняли запросы на совпадение по имени, то два, которые соответствуют «g») будет в указанном порядке).
Вы хотите изменить запрос на что-то вроде SELECT * FROM section_tb WHERE id in (1,2,3,4,5,6,7,8,9) ORDER BY level
(или, возможно, просто SELECT * FROM section_tb ORDER BY level
), вызвать его один раз и просмотреть результаты.