Stefan: WHERE bei WHERE MATCH

Hallo,

ich habe nun schon einige Zeit gegooglet, konnte aber keine Antwort auf meine Frage finden. Ich bin derzeit dabei mir eine kleine Suchfunktion zu basteln und meine Abfrage sieht derzeit ungefaehr so aus:

SELECT column1, column2, column3
FROM table
WHERE MATCH (column2)
AGAINST ('$Suchbegriff')
LIMIT 0,5");

Das funktioniert auch alles wunderbar. Nun moechte ich allerdings meine Ausgabe noch weiter einschraenken. Das bedeuetet ich wuerde am liebsten noch eine weitere WHERE Klausel in die Abfrage einbringen. Ist das generell moeglich? Oder gibt es auch andere Wege sein Resultat weiter einzuschraenken? Ich wuerde mich auch ueber Antworten freuen, wenn jemand sagt und weiß, dass es absolut nicht moeglich ist, damit ich mir was anderes ueberlegen kann.

Vielen Danke schonmal im vorraus...

  1. Hallo

    meine Abfrage sieht derzeit ungefaehr so aus:

    SELECT column1, column2, column3
    FROM table
    WHERE MATCH (column2)
    AGAINST ('$Suchbegriff')
    LIMIT 0,5");

    Nun moechte ich allerdings meine Ausgabe noch weiter einschraenken. Das bedeuetet ich wuerde am liebsten noch eine weitere WHERE Klausel in die Abfrage einbringen. Ist das generell moeglich?

    Nein. [1]
    Warum willst Du den AND-Operator nicht nutzen?

    Freundliche Grüße

    Vinzenz

    [1] ein Subselect könnte natürlich eine eigene WHERE-Klausel haben.

    1. Nein. [1]
      Warum willst Du den AND-Operator nicht nutzen?

      Ich habe verschiedene Möglichkeiten probiert die vorhandene WHERE Klause mit AND zu erweitern. Unter anderem hatte ich folgende Möglichkeiten. Bei allen folgenden Möglichkeiten hat MySQL einen Fehler ausgegeben:

      Erster Versuch:

      SELECT column1, column2, column3
      FROM table
      WHERE( (MATCH (column2)) AND (column3='1'))
      AGAINST ('$Suchbegriff')
      LIMIT 0,5");

      Zweiter Versuch:

      SELECT column1, column2, column3
      FROM table
      WHERE MATCH (column2)
      WHERE column3='1'
      AGAINST ('$Suchbegriff')
      LIMIT 0,5");

      gruß Stefan

      1. allen folgenden Möglichkeiten hat MySQL einen Fehler ausgegeben:

        verständlich...

        Erster Versuch:

        SELECT column1, column2, column3
        FROM table
        WHERE( (MATCH (column2)) AND (column3='1'))
        AGAINST ('$Suchbegriff')
        LIMIT 0,5");

        »

        _müsste_ (wenn ich jetzt keinen Fehler gemacht habe) so aussehen:

        SELECT column1, column2, column3
        FROM table
        WHERE column3='1' AND (MATCH (column2) AGAINST ('$Suchbegriff'))
        LIMIT 0,5";

        Zweiter Versuch:

        völlig falsch, da 2x WHERE

        Gruß, Samoht

        --
        fl:| br:> va:) ls:< n4:( ss:) de:] js:| mo:}
        "Computer games don't affect kids; I mean if Pac-Man affected us as kids, we'd all be running around in darkened rooms, munching magic pills and listening to repetitive electronic music."
        (Kristian Wilson, Nintendo, 1989)
        1. Hallo,

          SELECT column1, column2, column3
          FROM table
          WHERE column3='1' AND (MATCH (column2) AGAINST ('$Suchbegriff'))
          LIMIT 0,5";

          OK, perfekt... das war es was ich gesucht habe. Vielen Dank, funktioniert jetzt alles wie es soll.

          1. Hallo,

            ich habe eine Tabelle (table) mit 3 Zeilen. In Zeile 1 & 2 steht bei column2 der indentische Inhalt. Ziel meiner MySQL-Abfrage ist es eine kleine Suchfunktion zu bauen. Meine Abfrage sieht so aus:

            SELECT column1, column2, column3
            FROM table
            WHERE column3='1' AND (MATCH (column2) AGAINST ('$Suchbegriff'))
            LIMIT 0,5";

            Jetzt steht zum Beispiel in column2 in Zeile 1 Hallo und in Zeile 2 Wiedersehen. Wenn ich jetzt die oben gezeigte Funktion ausfuehre und $Suchbegriff mit Hallo austausche, zeigt er mir die Zeile an in der Hallo steht. Das ist soweit auch richtig und sol auch so sein.

            Wenn ich jetzt eine dritte Zeile anlege und in column2 wiederum das Wort Hallo schreibe (also das 2 x Hallo in der gleichen Spalte steht) und anschließend wieder die Funktion aufrufe und den $Suchbegriff durch Hallo ersetze findet er keine Resultate mehr. Das heißt sobald ein Wert in einer Spalte doppelt vor kommt scheitert meine Suche, weil dann keine Resultate mehr ausgegeben werden.

            Ich wuerde ich freuen, wenn mir auch bei diesem Problem jemand zur Seite stehen koennte. Ich habe schon alles moegliche Versucht. Auch das MySQL Tutorial konnte mir zu diesem Problem nicht helfen.

            Vielen Dank schon mal im vorraus.

            1. Wenn ich jetzt eine dritte Zeile anlege und in column2 wiederum das Wort Hallo schreibe (also das 2 x Hallo in der gleichen Spalte steht) und anschließend wieder die Funktion aufrufe und den $Suchbegriff durch Hallo ersetze findet er keine Resultate mehr. Das heißt sobald ein Wert in einer Spalte doppelt vor kommt scheitert meine Suche, weil dann keine Resultate mehr ausgegeben werden.

              Aber column3 ist sicher '1' in Zeile 3?

              Gruß, Samoht

              --
              fl:| br:> va:) ls:< n4:( ss:) de:] js:| mo:}
              "Computer games don't affect kids; I mean if Pac-Man affected us as kids, we'd all be running around in darkened rooms, munching magic pills and listening to repetitive electronic music."
              (Kristian Wilson, Nintendo, 1989)
              1. Aber column3 ist sicher '1' in Zeile 3?

                Ja, die ist sicher 1

                1. War grad auf dem Schlauch gestanden, guck Dir bitte das Posting von Vinzenz an, bzw. das genaue Verhalten von MATCH AGAINST!

                  Gruß, Samoht

                  --
                  fl:| br:> va:) ls:< n4:( ss:) de:] js:| mo:}
                  "Computer games don't affect kids; I mean if Pac-Man affected us as kids, we'd all be running around in darkened rooms, munching magic pills and listening to repetitive electronic music."
                  (Kristian Wilson, Nintendo, 1989)
            2. Hallo

              Ziel meiner MySQL-Abfrage ist es eine kleine Suchfunktion zu bauen. Meine Abfrage sieht so aus:

              SELECT column1, column2, column3
              FROM table
              WHERE column3='1' AND (MATCH (column2) AGAINST ('$Suchbegriff'))
              LIMIT 0,5";

              Wenn ich jetzt eine dritte Zeile anlege und in column2 wiederum das Wort Hallo schreibe (also das 2 x Hallo in der gleichen Spalte steht) und anschließend wieder die Funktion aufrufe und den $Suchbegriff durch Hallo ersetze findet er keine Resultate mehr.

              Das ist das zu erwartende Verhalten, wie es auch im Handbuch dokumentiert ist.
              Siehe dazu folgenden Archivthread und die darin enthaltenen Hinweise von ChrisB und mir.

              Freundliche Grüße

              Vinzenz

              1. Das ist das zu erwartende Verhalten, wie es auch im Handbuch dokumentiert ist.
                Siehe dazu folgenden Archivthread und die darin enthaltenen Hinweise von ChrisB und mir.

                Ja, klar jetzt wo du es sagst fällt es mir wie Schuppen von den Augen. Ich hatte bei meinem ganzen komplizierten Denken an die 50% Marke nicht gedacht. Vielen Dank, jetzt funktioniert wirklich alles :)

                gruß Stefan

  2. Hi,

    wie soll das denn aussehen mit der zweiten WHERE Klausel?

    • du möchtest von den 5 gefundenen die Menge noch weiter reduzieren/einschränken
    • du möchtest die 5 gefundenen nach irgendwas sortieren
    • du möchtest z.b. auch noch column3 parallel mit einer einschränkung belegen

    Mehrere Einschränkungen notiert man für gewöhnlich innerhalb EINER WHERE Klausel unter verwendung von logischen Operatoren wie AND, OR, NOT sowie geeigneter Klammersetzung, also à la

    [code lang=sql]WHERE (bedingung1 OR bedingung2) AND bedingung3[code]

    bedingungN wäre z.b. MATCH(column2) AGAINST ('Suchbegriff')

    Grüsse,
    Frank

      • du möchtest von den 5 gefundenen die Menge noch weiter reduzieren/einschränken

      Ja indirekt. Also meine Datenbank hat mehr als 5 Eintraege. Also gehen wir mal davon aus ich habe eine Datenbank mit 10 Eintraegen. Diese soll jetzt mit meiner Abfrage wie im ersten Post durchsucht werden. Die Suche soll allerdings durch weitere Kreterien eingeschraenkt werden. Er soll praktisch erst die Eintraege Filtern die gar nicht in Frage kommen (das wollte ich mit der WHERE Klausel machen) und anschließend soll er die noch übrige gebliebenen Eintraege durchsuchen.

      • du möchtest die 5 gefundenen nach irgendwas sortieren

      Nein!

      • du möchtest z.b. auch noch column3 parallel mit einer einschränkung belegen

      Ja, siehe Antwort auf erste Frage...

      gruß Stefan