Loadbalancer: Einfache Datenbankabfrage (Codeoptimierung)

Hallo,

brauche dringend die Hilfe eines Experten :)

Ich bastel gerade etwas an einem bestehenden PHP-Skript, um aus einer mySQL-DB alle Einträge von 0-9 und A-Z abzufragen (Titel). Das Skript ist schon recht alt und wurde damals von einem Bekannten geschrieben.

Nun die Frage: Lassen sich die zwei Codeblöcke (Abfrage 0-9 und Abfrage A-Z) nicht mittels einer Schleife o.ä. zu einem Codeblock zusammenlegen? Habe leider bisher nur wenig Ahnung. Danke! :)

---Codeblock 1---
$query="select title from $mytable where ascii(substring(title,1,1)) between 48 AND 57 order by title";
 $result = @mysql_db_query($dbname,$query,$db) or die(mysql_error());
 $count=0;
  while ($row = mysql_fetch_row($result))
  {
   $count=1;
   $title=$row[0];
    $t = urlencode($title);
   $title=str_replace("<br>","",$title);
     echo $title;
  }
 if ($count==0)
  echo "Keine Einträge\n";
 echo "</div>\n";

---Codeblock 2---
 for ($letter = A; $letter <> AA; $letter++)
  {
    $query="select title from $mytable where title like '$letter%' order by title";
   $result = @mysql_db_query($dbname,$query,$db) or die(mysql_error());
   $count=0;
    while ($row = mysql_fetch_row($result))
   {
     $count=1;
     $title=$row[0];
      $t = urlencode($title);
      $title=str_replace("<br>","",$title);
      echo $title;
    }
   if ($count==0)
    echo "Keine Einträge\n";
   echo "</div>\n";
------

Danke!

  1. Hallo

    Ich bastel gerade etwas an einem bestehenden PHP-Skript, um aus einer mySQL-DB alle Einträge von 0-9 und A-Z abzufragen (Titel). Das Skript ist schon recht alt

    das ist unschwer zu erkennen.

    und wurde damals von einem Bekannten geschrieben.

    Dein Bekannter hatte leider wenig Ahnung und sorgt daher mit dafür, dass die Loadbalancer unnötig Arbeit bekommen.

    Nun die Frage: Lassen sich die zwei Codeblöcke (Abfrage 0-9 und Abfrage A-Z) nicht mittels einer Schleife o.ä. zu einem Codeblock zusammenlegen?

    Ja, lassen sie sich.

    Habe leider bisher nur wenig Ahnung.

    Wovon hast Du wenig Ahnung? Ganz allgemein? Von PHP? Von SQL? Es liegt allein in Deiner Hand, diesen Zustand zu ändern. Bitte tu dies.

    Danke! :)

    Danke gleichfalls.

    $query="select title from $mytable where ascii(substring(title,1,1)) between 48 AND 57 order by title";

    Es gibt den OR-Operator.

    $result = @mysql_db_query($dbname,$query,$db) or die(mysql_error());

    Lies Dir durch, was das Handbuch zu mysql_db_query() zu sagen hat. Weiterhin ist es nicht die beste Idee, Fehlermeldungen  einfach zu unterdrücken.

    $count=0;

    Eine überflüssige Variable, es gibt mysql_num_rows().

    [...]

    if ($count==0)
      echo "Keine Einträge\n";
    echo "</div>\n";

    for ($letter = A; $letter <> AA; $letter++)
      {
        $query="select title from $mytable where title like '$letter%' order by title";

    Ein vergeßlicher Bekannter. Oben kennt er noch BETWEEN und auch SUBSTRING, hier werden überflüssigerweise 26 einzelne Abfragen abgesetzt.

    Viel Spass beim Lernen, beim Aktualisieren und nicht zuletzt beim Optimieren

    Vinzenz

    1. Danke für Deine Antwort. Ja, derjenige hatte tatsächlich nur begrenzt Ahnung und ja, es liegt wirklich schon Jahre zurück (PHP3-Zeit).

      Mit keine bzw. sehr wenig Ahnung bezog ich mich auf PHP/mySQL, weshalb ich mich über eine etwas konkretere Antwort sehr gefreut hätte. Nicht jeder will PHP-Profi werden ;) In meinem Fall ist's eine quasi einmalige Sache.

      Danke!

      Hallo

      Ich bastel gerade etwas an einem bestehenden PHP-Skript, um aus einer mySQL-DB alle Einträge von 0-9 und A-Z abzufragen (Titel). Das Skript ist schon recht alt

      das ist unschwer zu erkennen.

      und wurde damals von einem Bekannten geschrieben.

      Dein Bekannter hatte leider wenig Ahnung und sorgt daher mit dafür, dass die Loadbalancer unnötig Arbeit bekommen.

      Nun die Frage: Lassen sich die zwei Codeblöcke (Abfrage 0-9 und Abfrage A-Z) nicht mittels einer Schleife o.ä. zu einem Codeblock zusammenlegen?

      Ja, lassen sie sich.

      Habe leider bisher nur wenig Ahnung.

      Wovon hast Du wenig Ahnung? Ganz allgemein? Von PHP? Von SQL? Es liegt allein in Deiner Hand, diesen Zustand zu ändern. Bitte tu dies.

      Danke! :)

      Danke gleichfalls.

      $query="select title from $mytable where ascii(substring(title,1,1)) between 48 AND 57 order by title";

      Es gibt den OR-Operator.

      $result = @mysql_db_query($dbname,$query,$db) or die(mysql_error());

      Lies Dir durch, was das Handbuch zu mysql_db_query() zu sagen hat. Weiterhin ist es nicht die beste Idee, Fehlermeldungen  einfach zu unterdrücken.

      $count=0;

      Eine überflüssige Variable, es gibt mysql_num_rows().

      [...]

      if ($count==0)
        echo "Keine Einträge\n";
      echo "</div>\n";

      for ($letter = A; $letter <> AA; $letter++)
        {
          $query="select title from $mytable where title like '$letter%' order by title";

      Ein vergeßlicher Bekannter. Oben kennt er noch BETWEEN und auch SUBSTRING, hier werden überflüssigerweise 26 einzelne Abfragen abgesetzt.

      Viel Spass beim Lernen, beim Aktualisieren und nicht zuletzt beim Optimieren

      Vinzenz