MyBB.de Forum
Problem beim Auslesen der "parentlist" - Druckversion

+- MyBB.de Forum (https://www.mybb.de/forum)
+-- Forum: Sonstiges (https://www.mybb.de/forum/forum-1.html)
+--- Forum: Programmierung (https://www.mybb.de/forum/forum-32.html)
+--- Thema: Problem beim Auslesen der "parentlist" (/thread-23059.html)



Problem beim Auslesen der "parentlist" - Jockl - 06.01.2011

Hallo,

ich steh gerade ein wenig auf dem Schlauch....

Aus der Tabelle "forums" möchte ich die Spalten "name" und "parentlist" auslesen. Die in der Spalte "parentlist" enthaltenen Foren-IDs möchte ich weiterverarbeiten. Allerdings habe ich mit der Umsetzung ein Problem, da "parentlist" ja zumeist ein unterschiedlich großes Array darstellt. Ich muss also erst einmal die Größe ermitteln. Vermutlich brauche ich dazu einen (weiteren?) Query mit "COUNT(*)". Nur, wie komme ich dann an die einzelnen IDs? Mit explode? Wenn ja, das habe ich mal versucht, aber keine Erfolg gehabt....

Hier mal so im Groben, der Code.
PHP-Code:
$fid intval($mybb->input['fid']);
$query $db->simple_select("forums""name, parentlist""fid = ".$fid."");
$foruminfo $db->fetch_array($query);
$foruminfo['name'] = ....;
// Bis hierher funktioniert es soweit, aber...
// wie erhalte ich diese Info und die Anzahl der enthaltenen IDs?
$foruminfo['parentlist']['...'] = ...; 

Für einen Tipp wäre ich dankbar.... Wink


RE: Problem beim Auslesen der "parentlist" - StefanT - 06.01.2011

Das ist nur eine mit Kommas getrennte Liste, kein Array und auch nichts, was MySQL zählen könnte.


RE: Problem beim Auslesen der "parentlist" - Jockl - 06.01.2011

Ok, hab's hinbekommen. Wink


Edit: so sieht mein Code nun aus. Allerdings möchte ich nicht ausschließen, dass ich da "von hinten durch die Brust gedacht habe"... Wink
Meint Ihr, das lässt sich noch irgendwie kürzen?
PHP-Code:
        $fid intval($mybb->input['fid']);
        
$query $db->simple_select("forums""parentlist""fid = ".$fid."");
        
$foruminfo $db->fetch_array($query);
        
$unterforen explode(","$foruminfo['parentlist']);
        
$description = array();
        
$i 0;
        while (
$unterforen[$i] >= 3){
            
$query $db->simple_select("forums""name""fid = ".$unterforen[$i]."");
            
$foruminfo $db->fetch_array($query);
            
array_push($description$foruminfo['name']);
            
$i++;
        }
        
$description implode(" / "$description);
        echo 
$description



RE: Problem beim Auslesen der "parentlist" - frostschutz - 06.01.2011

Ich frage lieber mal nicht was du da eigentlich machst,

die parentlist kannst du ja in einem SQL Query verarbeiten

fid in (parentlist)

Davon abgesehen gibts aber noch den Forencache, so daß du da möglicherweise gar nicht an die Datenbank heran musst.

Falls du da Breadcrumbs bastelst, das macht MyBB ja auch schon, könnte man sich ja mal anschauen wie...


RE: Problem beim Auslesen der "parentlist" - Jockl - 06.01.2011

(06.01.2011, 23:13)frostschutz schrieb: Ich frage lieber mal nicht was du da eigentlich machst.
Bei Dir liest sich so ein Satz immer so, dass man sich fast seines Mutes beraubt glaubt... Smile

Aber Danke für Deine Antwort! Tatsächlich gleicht das, was ich machen möchte, dem Breadcrumb. Daran hatte ich nicht gedacht und werde mir das mal ansehen. Den Forencache habe ich mir jetzt auch mal angesehen und der hält diese Infos auch schon bereit... Blush

Ich hatte mich einfach mal mit dynamischen Metatags beschäftigt und ob ich das umsetzen kann. Nicht, dass mir das einen großen Nutzen bringen würde, weil unser Forum sowieso nicht eingesehen werden kann, aber ich sehe so etwas einfach als Übung, Lernen, wie auch immer man das bezeichnen will... Wink





RE: Problem beim Auslesen der "parentlist" - frostschutz - 07.01.2011

(06.01.2011, 23:46)Jockl schrieb: Bei Dir liest sich so ein Satz immer so, dass man sich fast seines Mutes beraubt glaubt... Smile

Geht mir genauso, wenn mir jemand mit so blöden Kommentaren kommt. Hält mich halt nicht davon ab selber welche zu machen. Hat halt jeder so seine Macken... Blush Ich meins nicht böse und ich versuche normalerweise, auch was gehaltvolles und nützliches beizutragen. Insofern gleicht sich das hoffentlich irgendwie aus... Neinja?

Daß dir die parentlist Probleme macht, braucht dir auch nicht peinlich sein. Datenbankfelder in denen Daten so komisch drinstehen gehören auch zu meinen ganz persönlichen Favoriten, den Vogel schießen hier allerdings die Events ab, bei denen man über die Datenbank gar nicht abfragen kann, ob sich der Event wiederholt und falls ja, wann er das nächste Mal stattfindet... stattdessen stehen dann 10 verschiedene Sachen zusammengepanscht in einem Datenfeld, und der Code der das auswertet ist kompliziert bis unleserlich. Eine gute Lösung ist das dann halt auch nicht.


RE: Problem beim Auslesen der "parentlist" - Jockl - 07.01.2011

Also mit dem Forumcache bin ich leider nicht klar gekommen und bin mir auch nicht sicher, ob es recht viel einfacher geworden wäre. Stattdessen verwende ich aber jetzt die Fkt. get_parent_list() und spare mir dadurch zumindest einen Query. Des weiteren habe ich statt der while-Schleife, die ständig Probleme bereitete, nun foreach verwendet. Funktioniert ganz gut, mittlerweile auch in einer ausgelagerten Plugin-Datei und nicht nur in der global.php...
PHP-Code:
$fid intval($mybb->input['fid']);
$parentlist explode(","get_parent_list($fid));
$description = array();
foreach (
$parentlist as $value) {
    
$query $db->simple_select("forums""name""fid = ".$value."");
    
$result $db->fetch_array($query);
    
array_push($description$result['name']);
}
$description implode(" / "$description);
echo 
$description



RE: Problem beim Auslesen der "parentlist" - StefanT - 08.01.2011

Mit dem Cache wird es nicht einfacher, aber schneller.


RE: Problem beim Auslesen der "parentlist" - thebod - 08.01.2011

@frostschutz: Und was das Datenbanklayout angeht: Das ist Supersimpel!

Schau dir mal Magento an, alleine 320 Tabellen, davon vielleciht 10 Flat und 310 EAV Tabellen - viel Spaß beim lesen und erlernen Wink Das kannste nämlich knicken!

...und das Feld "repeats" sagt doch alles in der Event-Tabelle Wink

Ansonsten gilt: immer Cache, kann Geschwindigkeit erhöhen und DB-Server entlasten.