SQL-Abfrage fehlerhaft

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

  • SQL-Abfrage fehlerhaft

    Hi,

    bei mir ist folgendes Problem aufgetreten:

    Ich habe eine Suchfunktion welche mit AND,OR,NOT arbeitet und in mehreren Feldern sucht.

    Sieht dann so aus:
    PHP-Code:
    echo "SELECT * FROM sieg_objekte WHERE status='1'

    AND (
      (
        LOWER(name LIKE '%freunde%')
        OR LOWER(objekt_beschreibung LIKE '%freunde%')
        OR LOWER(objekt_kurzbeschreibung LIKE '%freunde%')
      )

      AND (
        LOWER(name NOT LIKE '%bekannte%')
        OR LOWER(objekt_beschreibung NOT LIKE '%bekannte%')
        OR LOWER(objekt_kurzbeschreibung NOT LIKE '%bekannte%')
      )

      AND (
        rubrik LIKE '%'
        OR bereich LIKE '%'
      )
    ) order by name"

    Jetzt sollte er ja alle Einträge finden, welche das Wort "freunde" enthalten, aber nicht das Wort "bekannte",
    Aber genau das macht er nicht! Er zeigt trotzdem allemit "freunde" an.
    Sobald ich das ganze auf eine Spalte begrenze funktioniert es.
    Es liegt also an dem OR zwischendrinn! So, ersetz ich das durch AND, müsste ja jede Spalte das Wort enthalten, was aber wiederrum für meine Suche falsch wäre!

    Mir fällt grade echt nix ein...

    Wisst ihr, was ich da machen kann?

    Danke
    Zuletzt geändert von Timelesk; 11.02.2005, 12:27.

  • #2
    Re: SQL-Abfrage fehlerhaft

    ich habe meine zweifel, ob mysql es versteht, wenn du LOWER so anwendest, wie du's tust.

    AND (
    rubrik LIKE '%'
    OR bereich LIKE '%'
    weg damit, bitte.
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      Hi,

      ok, hab des mit der rubrik und bereich ein wenig umgemoddelt (die sind ja nicht immer leer, aber bei meinem jetzigen beispiel schon)! Wird auf jedenfall nicht mehr dranngehangen, sofern leer!

      Das mit LOWER hab ich auch bearbeitet, aber der Fehler existiert immernoch:

      PHP-Code:
      echo "SELECT * FROM sieg_objekte WHERE status='1'

      AND (
        (
          LOWER(name) LIKE LOWER('%freunde%')
          OR LOWER(objekt_beschreibung) LIKE LOWER('%freunde%')
          OR LOWER(objekt_kurzbeschreibung) LIKE LOWER('%freunde%')
        )

        AND (
          LOWER(name) NOT LIKE LOWER('%bekannte%')
          OR LOWER(objekt_beschreibung) NOT LIKE LOWER('%bekannte%')
          OR LOWER(objekt_kurzbeschreibung) NOT LIKE LOWER('%bekannte%')
        )
      ) order by name"


      Aber irgendwie will das immernoch nicht...

      Kommentar


      • #4
        Versuch mal
        PHP-Code:
        echo "SELECT * FROM sieg_objekte WHERE status='1'

        AND 
        (
          (
            LOWER(name LIKE '%freunde%')
            OR LOWER(objekt_beschreibung LIKE '%freunde%')
            OR LOWER(objekt_kurzbeschreibung LIKE '%freunde%')
          )

          AND   LOWER(name NOT LIKE '%bekannte%')
          AND   LOWER(objekt_beschreibung NOT LIKE '%bekannte%')
          AND   LOWER(objekt_kurzbeschreibung NOT LIKE '%bekannte%')
          
        ) order by name"

        Grundsätzlich hätte ich auch eher LOWER(name) like ... geschrieben, aber das fuzt ja auch anders ;-)

        Kommentar


        • #5
          Hi,

          besten Dank, daran lag es wirklich!
          Da dieses OR in ner Schleife liegt und diese Schleife 2x existiert (einmal für LIKE und einmal für NOT LIKE, hab ich das OR bei der NOT LIKE -Schleife durch ein AND ersetzt und jetzt funktioniert es!

          Vielen vielen Dank

          Kommentar


          • #6
            btw: vergleiche von TEXT-datentypen sind in mysql immer case-insensitive, solange du es nicht anders festlegst.
            ist LOWER bei dir also überhaupt notwendig ...?
            I don't believe in rebirth. Actually, I never did in my whole lives.

            Kommentar


            • #7
              dann auf jedenfall nicht!

              vielen vielen Dank

              Kommentar

              Lädt...
              X