Ankündigung

Einklappen
Keine Ankündigung bisher.

Abbfrage mit regulären Ausdrücken

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Abbfrage mit regulären Ausdrücken

    Hallo,

    ich habe in MySQL 5 eine Tabelle angelegt, in der Angaben zu Suchmaschinen enthalten sind. Unter anderem existiert ein Spalte ('Suchmuster') für das prüfen einer Hostadresse mittels regulären Ausdrücken.

    Folgendes Script habe ich geschrieben, um einen Besucher von einem Robot unterscheiden zu können:

    PHP-Code:
        $query         "SELECT `titel`,`suchmuster`
                        FROM `referenz_tabellen_robots`"
    ;
        
        
    $dbquery    mysql_query($query,$dbverbindung);

        if (
    mysql_num_rows($dbquery) != 0)
            {
            for (
    $a $a mysql_num_rows($dbquery) ; $a++)
                {
                
    $robot[$a] = mysql_fetch_array($dbquery);
                }
            }
            
        for (
    $a $a count($robot) ; $a++)
            {
            if(
    ereg($robot[$a]['suchmuster'],$_SERVER['HTTP_HOST']))
                {
                
    $robotergebnis 1;
                }
            } 
    Für eine Statistik unterschiedlicher Bereiche wird dieses Scriptschnipsel in jede Seite eingebunden.

    Meine Überlegung ist, diese Aufgabe direkt von der Datenbank ausführen zu lassen. Hierzu habe ich in der Dokumentation folgendes beispielhaft gefunden:

    PHP-Code:
    mysqlSELECT FROM haustier WHERE name REGEXP '^b'
    Hier ist es so, das Daten in der Tabelle mit einem Suchmuster verglichen werden.
    Mein anliegen ist, das ich die Suchmuster in einer Spalte gespeichert habe, die dann mit einem String verglichen werden.

    Meine Frage: Gibt es eine Anweisung die auch in die andere Richtung funktioniert?

    Gruß Merlin der Zauberer

  • #2
    Hallo Zauberer,

    wusste ich es doch, dass das Thema Session mit Statistik zusammenhängt

    Zu deiner Frage:
    Ich verstehe nicht ganz, worauf du hinaus möchtest. Ist es dir ein Anliegen, die Reulären Ausdrücke zu verwalten, mit dem ein Record identifiziert werden kann, oder möchtest du zu jedem Datensatz einen Regulären Ausdruck speichern?

    Bei ersteren empfielt es sich jedoch eine Tabelle mit den Datensätzen (welche auch immer), eine zweite mit den Regulären Ausdrücken und eine dritte mit den beiden Primary-Keys anzulegen, dann kannst du später auch andere Datensätze mit den Regulären Ausdrücken "assoziieren".

    Sollte ich auf dem Holzweg sein, gib bitte ein bischen mehr Info's preis...

    Kommentar


    • #3
      Hallo dr. e.,

      eine Tabellenstruktur mit Inhalt ist bereits vorhanden. Diese sieht folgendermaßen aus:

      PHP-Code:
      ;
      Feld               Typ           Bespiel für Inhalt
      -----------------------------------------------------------------------------------
       
      id                  int(3)          [Primärschlüssel]
      robot               text            a1sitemap 
       titel                 text            A1 Sitemap                            
      suchmuster    text            
      ^A1 Sitemap Generator[ /]([0-9.]{1,10})
       
      url                 text           [url]http://www.micro-sys.dk/products/sitemap-generator[/url]...
       
      icon                blob        [PNG-Bild
      Zur zeit lese ich diese komplett aus und speichere das ganze in einen assozierten Array.

      PHP-Code:
          <?php $query         "SELECT `titel`,`suchmuster`
                          FROM `referenz_tabellen_robots`"
      ;
          
          
      $dbquery    mysql_query($query,$dbverbindung);

          if (
      mysql_num_rows($dbquery) != 0)
              {
              for (
      $a $a mysql_num_rows($dbquery) ; $a++)
                  {
                  
      $robot[$a] = mysql_fetch_array($dbquery);
                  }
              }
      Dann Vergleiche ich das Suchmuster aus der Datenbank mit dem besuchten Host

      PHP-Code:
      for ($a $a count($robot) ; $a++)
              {
              if(
      ereg($robot[$a]['suchmuster'],$_SERVER['HTTP_HOST']))
                  {
                  
      $robotergebnis 1;
                  }
              } 
      Ist das Suchmuster mindestens einmal vorhanden, setze ich die Variabel robotergebnis auf 1 und behandel dieses im weiteren Script nach meinem belieben.

      Meine Frage bezog sich darauf, ob es eine Möglichkeit gibt, diesen Vergleich direkt auf der Datenbank auszuführen.
      Bei 750 Datensätzen leidet zwar nicht die Perfomance, aber es ist für mich interessant, das ganze auf die Datenbank abzuwälzen.

      In der Dokumentation habe ich dann gefunden, dass es bereits den umgekehrten weg über

      PHP-Code:
      mysqlSELECT FROM haustier WHERE name REGEXP '^b'
      gibt. Hier wird ein Regulärer Ausdruck zum Vergleich an die Datenbank gesendet. Ich möchte jedoch eine Variabel an die Datenbank senden, die dort dann mit der Spalte Suchmuster eine Prüfung vornimmt.

      Schöne Grüße Merlin der Zauberer

      Kommentar


      • #4
        Hallo Merlin,

        es gibt in MySQL Kontrollstrukturen wir LOOP, mit denen man soetwas machen kann. Siehe auch http://dev.mysql.com/doc/refman/5.1/...statement.html.

        Kommentar

        Lädt...
        X