kostenloser Webspace werbefrei: lima-city


[MySQL] String korrekt mit Spaltenwert überprüfen

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    siteplayer

    siteplayer hat kostenlosen Webspace.

    Ich möchte den HTTP_USER_AGENT wie im Beispiel überprüfen. Allerdings sagt mir MySQL immer wieder das keine Zeile betroffen ist obwohl es 2 mögliche Übereinstimmungen geben könnte.

    Kann ich überhaupt eine Tabelle so durchsuchen oder muss ich die Tabelle weiterhin komplett auslesen und per while Schleife überprüfen?
    SELECT bot_id, bot_active, bot_name, bot_agent FROM bots WHERE "http://Mozilla/5.0 (Windows NT 5.1; rv:2.0) Gecko/20100101 Firefox/4.0Scooter/"  = "%bot_name%" ORDER BY bot_id DESC LIMIT 1
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Da die Auswertung des Ausdrucks
    "http://Mozilla/5.0 (Windows NT 5.1; rv:2.0) Gecko/20100101 Firefox/4.0Scooter/"  = "%bot_name%"
    immer falsch ist, stimmt die Antwort von MySQL. :biggrin:

    Die Abfrage, die du haben möchtest, sollte wohl eher so lauten:
    SELECT bot_id, bot_active, bot_name, bot_agent 
    FROM bots 
    WHERE bot_name LIKE "%http://Mozilla/5.0 (Windows NT 5.1; rv:2.0) Gecko/20100101 Firefox/4.0Scooter/%"
    ORDER BY bot_id DESC 
    LIMIT 1
    Nur wenn der Spaltenwert 100%ig mit dem String übereinstimmen soll, verwendest du statt LIKE den Vergleichsoperator =.

    Beitrag zuletzt geändert: 29.3.2011 15:16:29 von wagnerm
  4. Autor dieses Themas

    siteplayer

    siteplayer hat kostenlosen Webspace.

    Und das liefert mir das gleiche Ergebnis zurück: 0 :biggrin:
    Sry hab Vergessen die Tabelle zu erklären.
    bot_id | bot_name ...
    0 | http://
    1 | blabla
    2 | Scooter/
    Es soll also überprüft werden ob der bot_name in einem String vorkommt. Nicht ob der String im bot_name vorkommt.
  5. Achso! Das ändert natürlich die Aufgabenstellung grundlegend. :wink:

    Dann probier mal statt
    "%bot_name%"
    das
    CONCAT("%", bot_name, "%")

    Also:
    SELECT bot_id, bot_active, bot_name, bot_agent 
    FROM bots 
    WHERE "http://Mozilla/5.0 (Windows NT 5.1; rv:2.0) Gecko/20100101 Firefox/4.0Scooter/" LIKE CONCAT("%", bot_name, "%")
    ORDER BY bot_id DESC 
    LIMIT 1
    Ich weiß aber nicht ob das funktioniert. Ist nur eine spontane Idee!

    Beitrag zuletzt geändert: 29.3.2011 15:32:49 von wagnerm
  6. Autor dieses Themas

    siteplayer

    siteplayer hat kostenlosen Webspace.

    Leider gibt das auch nur 0 zurück :-(
  7. thomasba

    Co-Admin Kostenloser Webspace von thomasba

    thomasba hat kostenlosen Webspace.

    Also mit der Funktion LOCATE geht das so:

    Das gibt alles zurück, wo der String der DB am anfang gefunden wurde:
    SELECT
        *
    FROM
       `bot`
    WHERE
        LOCATE(`bot_name`,'http://Mo [...] efox/4.0Scooter/') = 1



    Bei diesen ist es egal, wo der String steht:
    SELECT
        *
    FROM
       `bot`
    WHERE
        LOCATE(`bot_name`,'http://Mo [...] efox/4.0Scooter/')


    du musst die Spaltennamen und den Namen der Tabelle anpassen ;)

    Beitrag zuletzt geändert: 29.3.2011 17:57:10 von thomasba
  8. Autor dieses Themas

    siteplayer

    siteplayer hat kostenlosen Webspace.

    Ich hatte noch einen kleinen Fehler drinnen gehabt.
    CONCAT("%", bot_name, "%")
    und
    LOCATE(`bot_name`,'http://Mo [...] efox/4.0Scooter/')
    funktionieren beide wie gewünscht.
  9. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!