Platzhalter % macht Probleme

emptynick

Erfahrenes Mitglied
Morgen,

mal wieder ein Problem von mir.
Und zwar Suche ich per WHERE title LIKE '%SUCHWORT%'.
Ist ja alles schön und gut, solang vor und nach "SUCHWORT" ein Leerzeichen/Wort etc. kommt.
Doch das muss ja nicht immer der Fall sein, zum Bespiel wenn der Text in der Datenbank "TEST SUCHWORT" lautet, so wird dieser Eintrag nicht berücksichtigt.

Was kann man da machen?


Vielen Dank für die Hilfe

emptynick
 
weil du auch ein % nach dem suchwort stehen hast erwartet er mindestens noch ein zeichen. du musst eine oder abfrage mit einbauen:
Code:
 title LIKE '%SUCHWORT%' OR  title LIKE 'SUCHWORT%' OR  title LIKE '%SUCHWORT'  title = 'SUCHWORT'
so dekchst du alle möglichkeiten ab wie:
Code:
blablaSUCHWORTblabla
SUCHWORTblabla
blablaSUCHWORT
SUCHWORT

aber das is alles nicht PHP sondern SQL ;)
 
Hallo,

alles schon probiert, bringt aber nichts.
Code wäre der Folgende:
Code:
$query = "SELECT * FROM tutorials WHERE active = '1' AND type1 = '2' OR title LIKE '%".mysql_real_escape_string($_POST['word'])."%' OR title LIKE '".mysql_real_escape_string($_POST['word'])."%' OR title LIKE '%".mysql_real_escape_string($_POST['word'])."' OR title LIKE '".mysql_real_escape_string($_POST['word'])."'";

Kommt das vielleicht mit den AND's davor in Konflikt?

Also das active = '1' muss sein. Das type1 = '2' muss NICHT mit in die Abfrage, kam mir aber nur logisch vor, da ich ja sonst mit dem OR das active = '1' "egalisieren" würde.
 
Zuletzt bearbeitet:
Die OR Bedinungen müssen, glaube ich, dann in Klammern:
PHP:
$query = "  SELECT
                *
            FROM
                tutorials
            WHERE
                active = '1'
            AND
            (
                type1 = '2'
            OR
                title LIKE '%".mysql_real_escape_string($_POST['word'])."%'
            OR
                title LIKE '".mysql_real_escape_string($_POST['word'])."%'
            OR
                title LIKE '%".mysql_real_escape_string($_POST['word'])."'
            OR
                title LIKE '".mysql_real_escape_string($_POST['word'])."'
            )
            ";
Bin mir aber nicht zu 100% sicher.
 
Würde ich anders sagen, auch wenn man das Ergebnis nicht unbedingt nachvollziehen kann, aber ich würde es so machen - "titel" ist in dem Fall eine gemeinsame Bedingung, die mit den anderen nichts zu tun hat.

Code:
$query =
"SELECT
 *
 FROM
 tutorials
 WHERE
   active = '1'
   AND
   type1 = '2'
   AND
   (
     title LIKE '%".mysql_real_escape_string($_POST['word'])."%'
     OR
     title LIKE '".mysql_real_escape_string($_POST['word'])."%'
     OR
     title LIKE '%".mysql_real_escape_string($_POST['word'])."'
     OR
     title LIKE '".mysql_real_escape_string($_POST['word'])."'
    )
";
 
Mit LIKE "%SUCHWORT%" werden ebenfalls alle vier Fälle erkannt:
Code:
SELECT
    "blablaSUCHWORTblabla" LIKE "%SUCHWORT%",
    "SUCHWORTblabla" LIKE "%SUCHWORT%",
    "blablaSUCHWORT" LIKE "%SUCHWORT%",
    "SUCHWORT" LIKE "%SUCHWORT%"
 
Zurück