phpbar.de logo

Mailinglisten-Archive

[php] =?iso-8859-1?Q?Re=3A_=5Bphp=5D_OT=3F=3A_Designr=E4tsel?=

[php] Re: [php] OT?: Designrätsel

Arash Yalpani php_(at)_phpcenter.de
Wed, 21 Mar 2001 15:23:15 +0100


Hallo Juri,

> es ist nicht sinnvoll. Der Grund ist ganz einfach - man 
> muss ALLE Seiten mit einer Query auslesen, und mit rekursiven 
> Funktionen bearbeiten, bis ein Array mit passender Strukture 
> erstellt wird. Hat man 500 Seiten, dauert's halt 
> dementsprechend, obwohl meinetwegen nur 10 Menu-Points 
> angezeigt werden
> sollen. Schlecht.

Hmm, mal angenommen ich möchte einen Diskussionsfaden darstellen.
Meine Daten würden in einer solchen Tabelle gespeichert sein:

Table: Posting

Id | Parent_Id | Title              | Text                        |
---+-----------+--------------------+-----------------------------+
 1 |         0 | tit1               | jkasdhkasjhdjkash           |
 2 |         0 | tit2               | sjdhkasjhdsadsjahd          |
 3 |         1 | tit1.1             | djfhsdnxkjcnxcjhvciuziuz    |
 4 |         1 | tit1.2             | vxcy6xutcuxztcyxuzctyuxzct  |
 5 |         3 | tit1.1.1           | 8xc7v6xc6v87x6v78cxv        |

was ich machen würde um den Diskussionsfaden anzuzeigen wäre:

Die Daten aus der DB in ein Array speichern:

$result = _(at)_mysql_query("SELECT Id, Parent_Id, Title FROM Posting");
$i = 0;
$arr = array();
while (list($id, $parent_id, $title) = _(at)_mysql_fetch_row($result)) {
	$arr[$i]["id"]        = $id;
	$arr[$i]["parent_id"] = $parent_id;
      $arr[$i]["title"]     = $title;
      $i++;
}

In meinem Beispiel komme ich somit auf 5 Einträge im Array. Wenn ich
500 Einträge habe, dann eben auf 500. Aber wann tritt bei Dir der Fall
auf, dass aus 500 Einträgen 10 werden und die übrigen 490 Overhead
sind? 

Also weiter: ich habe nun ein Array gefüllt mit allem was ich brauche,
um den Treeview zu basteln. Und das mit einer einzigen Query!

Naja, jetzt fehlt mir halt nur noch ein Satz von Funktionen
um Array-Elemente effizient herauszufiltern. 
Nochmal zu meinem Beispiel:

$result_arr = array_query("SELECT id, title FROM $arr WHERE parent_id = 3");


Wenn das Deine Bibliothek kann, würde ich mich über eine Kopie 
sehr freuen :-) 


> Die ideale Vorgehensweise - nur das auslesen, was 
> tatsaechlich angezeigt
> wird. Und mit einem Query, maximal zwei. Deswegen ist IMHO
>  http://www.koehntopp.de/kris/artikel/sql-self-references/ schon der
> richtige

ich finde das Verfahren einfach zu kompliziert, wenn man doch nur
eine einfache Treeview realisieren möchte. Und das Vater-Sohn-Verfahren
finde ich relativ simpel. Ich möchte nur einfach von den vielen 
verschachtelten DB-Queries weg...hin zu vielen verschachtelten 
"Array-Queries".


> Einsatz ( evtl. ein paar zusaetzliche Fields fuer eigene 
> Zwecke). Hat auch
> einige Nachteile gegenueber Vater<->Sohn Verfahren. Aber, 
> diese Nachteile
> sind nur im Bereich Nodes move und insert zu sehen. Wie oft passieren
> diese Ereignisse im Vergleich mit dem Auslesen von Tree ?

In meiner speziellen Anwendung selten bis gar nicht. Deswegen sehe
ich auch keinen Vorteil in Kristians Variante gegenüber der 
klassischen ID/Parent_Id-Variante.

Ist doch nur ein blöder Baum! ;-)

Trotzdem Danke für Deine ausführliche Antwort. Wenn möglich, schick mir
bitte mal Deine Klasse zu....

Tschö,
Arash


php::bar PHP Wiki   -   Listenarchive