Вы получаете ожидаемый результат. Если у вас есть набор результатов a,b,c,d
, вы начинаете с a
, который является родительской категорией, поэтому он перематывается назад к началу набора и снова перебирает a,b,c,d
как подкатегории. Теперь вы находитесь в конце сета, поэтому оба цикла завершатся, поскольку данных больше нет.
То, что вы, вероятно, хотите сделать, - это сначала прочитать все данные в массив PHP, а затем выполнить итерацию по ним и построить некую древовидную структуру. Вы также можете построить свою древовидную структуру непосредственно в цикле mysql_fetch.
В зависимости от того, чего вы пытаетесь достичь, есть и лучшие способы хранения ваших данных. Стоит прочитать, как хранить деревья и иерархические данные в SQL. Вложенные множества, вероятно, то, что вы хотите.
Еще одна вещь: не используйте mysql_fetch_array
, вместо этого используйте mysql_fetch_assoc
. В противном случае вы получите числовые и ассоциативные ключи и массив строк, который содержит вдвое больший объем данных, чем следует.