Klaus Mock: Was falsch an AND bzw. OR Suchabfrage /-formular?

Beitrag lesen

Hallo,

if ($operator1 == "UND"){
$daten = MYSQL_QUERY( "SELECT * FROM downloadprogramme WHERE titel LIKE '%$wort1%' OR beschreibung LIKE '%$wort1%' AND LIKE '%$wort2%' OR beschreibung LIKE '%$wort2%'",$verbindung);

Oft hilt es, mal ein bißchen umzuformatieren:

SELECT * FROM downloadprogramme
    WHERE titel LIKE '%$wort1%'
    OR    beschreibung LIKE '%$wort1%'
    AND   LIKE '%$wort2%'
    OR    beschreibung LIKE '%$wort2%'

uups, In Zeile 4 hat sich ein Fehler eingeschlichen;-)

Abgesehen davon, Du solltest wenn, dann schon etwas schalteln, weil ich denke eigentlich willst Du ja  daß wort1 und wort2 in entweder  titel oder beschreibung vorkommen. Hui klingt das jetzt kompliziert.
Also
SELECT * FROM downloadprogramme
    WHERE ( titel LIKE '%$wort1%'
            OR beschreibung LIKE '%$wort1%')
    AND   ( titel LIKE '%$wort2%'
            OR beschreibung LIKE '%$wort2%')

Und noch was,
wenn Du

SELECT alle,felder,der,tabelle,und,CONCAT(titel,beschreibung) suchtext FROM downloadprogramme
    WHERE  suchtext LIKE '%$wort1%'
    AND    suchtext LIKE '%$wort2%'

b
verwendest, ist das erst mal hübscher, zweitens übersichtlicher, drittens weniger fehleranfallig ...
und viertens von mir mal so hingeschrieben und nicht getestet :-(

Abgesehen davon, daß ich '*' nicht so gerne verwende, da es mir schon zu viele Probleme bereitet hat.

if ($operator1 == "ODER"){
$daten = MYSQL_QUERY( "SELECT * FROM downloadprogramme WHERE titel LIKE '%$wort1%'OR beschreibung LIKE '%$wort1%'OR LIKE '%$wort2%' OR beschreibung LIKE '%$wort2%'",$verbindung);
}

"SELECT * FROM downloadprogramme
     WHERE titel LIKE '%$wort1%'
     OR beschreibung LIKE '%$wort1%'
     OR LIKE '%$wort2%'
     OR beschreibung LIKE '%$wort2%'"

Und schon wieder die vermaledeite Zeile 4.

Und noch was,
wenn Du

SELECT alle,felder,der,tabelle,und,CONCAT(titel,beschreibung) suchtext FROM downloadprogramme
    WHERE  suchtext LIKE '%$wort1%'
    AND    suchtext LIKE '%$wort2%'

bzw.

SELECT alle,felder,der,tabelle,und,CONCAT(titel,beschreibung) suchtext FROM downloadprogramme
    WHERE  suchtext LIKE '%$wort1%'
    OR    suchtext LIKE '%$wort2%'

verwendest, ist das erst mal hübscher, zweitens übersichtlicher, drittens weniger fehleranfallig ...
und viertens von mir mal so hingeschrieben und nicht getestet :-(

Abgesehen davon, daß ich '*' nicht so gerne verwende, da es mir schon zu viele Probleme bereitet hat.

Grüße
  Klaus

PS.: vielleicht siehst Du Dir auch noch REGEXP/RLIKE in der Doku an. Steht irgendwo bei der Whereklausel, nicht weit vom LIKE