php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 10.04.2007, 15:26  
Erfahrener Benutzer
 
Registriert seit: 11.01.2005
Beiträge: 106
MerlinderZauberer ist zur Zeit noch ein unbeschriebenes Blatt
Standard 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
__________________
www.Sternenwelt.net - Astronomie im Internet -
www.SternenweltForum.net - Antworten rund um die Astronomie -
MerlinderZauberer ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 10.04.2007, 15:55  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.654
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

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...
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline   Mit Zitat antworten
Alt 10.04.2007, 21:16  
Erfahrener Benutzer
 
Registriert seit: 11.01.2005
Beiträge: 106
MerlinderZauberer ist zur Zeit noch ein unbeschriebenes Blatt
Standard

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
__________________
www.Sternenwelt.net - Astronomie im Internet -
www.SternenweltForum.net - Antworten rund um die Astronomie -
MerlinderZauberer ist offline   Mit Zitat antworten
Alt 10.04.2007, 22:41  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.654
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

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.
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 06:10 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.