私はこの単純なテーブルを持っているとしましょう。ここでpos_levelは位置のレベルで、pos_underはその上の位置のPIDです。PHPを使用してMySQLクエリ結果をネストされた配列として取得するにはどうすればよいですか?
レベル1では、私には「ゼネラルマネージャー」と「スーパーバイザー」があります。
レベル2では、「ゼネラルマネージャ(PID:1)」の下に「Asst。 (PID:2) ':'マーケティング 'の下にある[マネージャ]をクリックします。
レベル3では、[Asst。 (PID:3) ':' Sales '&' Purchase '(マーケティング(PID:2):なし)私はこのような結果として、ネストされた配列を取得して
+-----+-----------------+-----------+-----------+
| PID | pos_name | pos_level | pos_under |
+-----+-----------------+-----------+-----------+
| 1 | General Manager | 1 | 0 |
| 2 | Supervisor | 1 | 0 |
| 3 | Asst. Manager | 2 | 1 |
| 4 | Sales | 3 | 3 |
| 5 | Purchase | 3 | 3 |
| 6 | Marketing | 2 | 2 |
+-----+-----------------+-----------+-----------+
今どのように私は、クエリを作成します:
Array
(
[0] => Array
(
[pos_level] => 1
[pos_name] => General Manager
[pos_under] => Array
(
[0] => Array
(
[pos_level] => 2
[pos_name] => Asst. Manager
[pos_under] => Array
(
[0] => Array
(
[pos_level] => 3
[pos_name] => Sales
)
[1] => Array
(
[pos_level] => 3
[pos_name] => Purchase
)
)
)
)
)
[1] => Array
(
[pos_level] => 1
[pos_name] => Supervisor
[pos_under] => Array
(
[0] => Array
(
[pos_level] => 2
[pos_name] => Marketing
[pos_under] => Array
(
)
)
)
)
)
を私は複数のクエリを使用して、結果を使用してarray_push使用して試してみましたが、私は次のように持っています約100 + pos_nameと私はそれが面倒だと思う、私はまた、各レベルの複数のテーブルを使用して試して、各レベルのクエリを実行し続けるためにループを使用してみましたが、私は1つのテーブルを使用することができ、私のアプリケーションでさらに使用するために上記のネストされた配列としての結果。
すべての回答、コメント、および提案は非常に歓迎されています。ありがとうございました。
どのように多くのレベルすることができますあります?また、MySQLで期待している実際の出力を表示してください。 –
ネストした配列を自分で構築する必要があります。私はどのPHP関数もSQLクエリからマルチレベル配列を返し、SQLクエリは2次元のテーブルのような構造を返すとは思わない。 – yivi
私は一般的に、あなたが従うアプローチは良いものであるとは考えていません。それはスケールされないためです!データベースからすべてのエントリを取り出し、それらを単一の階層的な配列にパックしようとします。つまり、各エントリの複数のコピーをメモリに作成します。エントリ数が増えるとどうなりますか?あなたは常に、最終的には失敗に終わるスクリプトのメモリ消費を常に増加させています。 – arkascha