Hallo, Gast! (Registrieren)

Letzte Ankündigung: MyBB 1.8.38 veröffentlicht (30.04.24)


Benutzer, die gerade dieses Thema anschauen: 4 Gast/Gäste
Problem beim Auslesen der "parentlist"
#1
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
viele Grüße
Jockl
übersetzte und eigene Plugins
Zitieren
#2
Das ist nur eine mit Kommas getrennte Liste, kein Array und auch nichts, was MySQL zählen könnte.
[Bild: banner.png]

Bitte die Foren-Regeln beachten und im Profil die verwendete MyBB-Version angeben.
Zitieren
#3
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
viele Grüße
Jockl
übersetzte und eigene Plugins
Zitieren
#4
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...
Zitieren
#5
(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


viele Grüße
Jockl
übersetzte und eigene Plugins
Zitieren
#6
(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.
Zitieren
#7
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
viele Grüße
Jockl
übersetzte und eigene Plugins
Zitieren
#8
Mit dem Cache wird es nicht einfacher, aber schneller.
[Bild: banner.png]

Bitte die Foren-Regeln beachten und im Profil die verwendete MyBB-Version angeben.
Zitieren
#9
@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.
Zitieren


Möglicherweise verwandte Themen…
Thema Verfasser Antworten Ansichten Letzter Beitrag
  Auslesen der Benutzerdaten lmweissen 15 5.000 02.05.2009, 14:32
Letzter Beitrag: Michael