Programmierung eines Glossars / MySQL - Abfrage optimieren,

Funky_MF

Erfahrenes Mitglied
Hallo,

für ein Websiteprojekt habe ich ein Glossar entworfen, welches in alphabetischer Reihenfolge die Begriffe und die jeweiligen Erklärungen dazu liefert.
Für jeden Begriff wird ein eigener Datensatz angelegt. Die Darstellung erfolgt in 5 Gruppen (A-E, F-J, usw.)
Jetzt möchte ich Begriffe, welche in den Beschreibungen vorkommen und bereits im Glossar als Begriff mit Erklärung existieren, mit diesem automatisch verlinken.
Zur besseren Verdeutlichung ein Beispiel:
Käse = Ein Nahrungsmittel welches aus Milch hergestellt wird
Milch = Weiße Flüssigkeit mit hohem Eiweißgehalt

(In dem Fall würde "Milch" in der ersten Zeile per #id mit dem Begriff "Milch" in der zweiten Zeile verlinkt werden.)

Ich habe hierfür auch eine Lösung, allerdings ist die furchtbar laaaangsaaaam, ich bräuchte ein paar Tips, wie ich das besser machen könnte.
Hier mein Code:
PHP:
switch ($page) {
case "1": 
    $group = "A-E";
    break;
case "2":    
    $group = "F-J";
    break;
case "3":    
    $group = "K-O";
    break;
case "4":    
    $group = "P-T";
    break;
case "5":    
    $group = "U-Z";
    break;
}
$data = sql("SELECT * FROM glossar WHERE gl_group = '".$group."' ORDER BY gl_title ASC");

while ($inhalt = mysql_fetch_array ($data,MYSQL_ASSOC)) {    
       $arr = explode (" ", $inhalt['gl_description']);
       foreach ($arr as $v) {
        $dest = sql("SELECT * FROM glossar WHERE gl_title LIKE %$v%  LIMIT 1");
           if ($row = mysql_fetch_row($dest)){
               $v = "<a href=\"index.php?page=".$row[7]."#".$row[0]."\">".$v."</a>";
           }
           $description_arr[] = $v;                   
       }
       $description_str = implode (" ",$description_arr);
             
       echo "<p id=".$inhalt['gl_id']."><strong>".$inhalt['gl_title']."</strong> ".$description_str."</p>\n";
       unset($description_arr);
}
 
Zuletzt bearbeitet:
Also ich hätte da eine Idee, weiß aber nicht, ob das von der Performance her recht viel schneller is...

Also:
Du packst zuerst alle Titel in einen Array.
Danach lässt Du Dir die Beschreibungen ausgeben.

Dann vergeichst Du in die Einträge aus dem Titel-Array mit der Beschreibung und änderst in der Beschreibung mit str_replace den Titel.

Also ungefähr so:
PHP:
$data = sql("SELECT gl_titel FROM glossar"); 
$titel_array = array();
$counter = 0;

while($row = mysql_fetch_row($data)){
$titel_array[$counter] = $row['gl_titel']
$counter++
}

$data = sql("SELECT * FROM glossar WHERE gl_group = '".$group."' ORDER BY gl_title ASC"); 

while($row = mysql_fetch_row($data)){

	for($i = 0; $i <= $counter; $i++){
	$description_neu = str_replace($row['gl_description'], $titel_array[$i], "gewünschter Link");

}
 
Sorry @ Thread-Author, keine Lösung:
Kurzform des Codes von Hans:
Anstatt
PHP:
$data = sql("SELECT gl_titel FROM glossar");
$titel_array = array();
$counter = 0;

while($row = mysql_fetch_row($data)){
$titel_array[$counter] = $row['gl_titel']
$counter++
}
geht auch kürzer:
PHP:
$data = sql('SELECT gl_titel FROM glossar');
while($row = mysql_fetch_row($data))
    $titel_array[] = $row['gl_titel'];
 
Zurück