2012-11-03 29 views
1

我需要呈現2級分層註釋系統的線程視圖。評論存儲在數據庫中。有關層次結構的信息由字段'parent_id'(頂級註釋爲0)給出。我無法改變數據庫的結構。 本解決方案是通過多個SQL查詢的手段:線程視圖中的分層註釋系統:PHP和MySQL

  1. 執行SQL查詢來獲取所有頂層評論
  2. 代碼循環頂層註釋和用於它們中的每執行SQL查詢來獲取其子

現在,我不知道是否只有一個SQL查詢的解決方案,因爲他們後面的代碼來獲取所有的意見建議here通過線程對它們進行排序可能會更有效率。 任何reccomendation?

感謝, 盧西亞諾

+0

可能的重複[PHP從關係數據的數組創建多維數組](http://stackoverflow.com/questions/11239652/php-create-a-multidimensional-array-from-an-array-with-關係數據) – Yoshi

回答

0

我做過類似的腳本,並從我的角度來看,這是更好地做了第一個查詢獲取所有的「父母」(PARENT_ID == 0),然後對每一個他們會做另一個查詢來獲取所有'sons的信息。

如果您必須使用單個查詢檢索大量威脅,則必須等待查詢完成才能處理數據。如果您將查詢分爲不同的和較小的查詢,您可以在查找'子'之前開始格式化和打印它們。在單個查詢中執行此操作可能會使查詢速度變慢,因爲在有人創建新威脅時,在同一個查詢中使用更多表可能會由於lock_table而暫停查詢。

另一個解決方案,我只會建議,如果由於被迫使用多個JOIN或在非索引字段中使用WHERE而導致查詢非常緩慢(您絕不應該那樣做,但是如果您無法更改數據庫...)是在單個查詢中檢索所有威脅(父母和兒子,沒有任何那些使查詢變慢的WHERE或JOIN),然後使用PHP進行組織。這絕非實際可行,除非完成查詢的時間很長,否則不應使用此方法。