Stefan: mySQL: Ich will nur das Schwein...

Guten Tag

Ich habe in einer Spalte einer mySQL Datenbank Zellen mit:

1///////////////////////////////////////////////////////////
//'Schweinchensup' 'Sparschwein' 'Hängebauchschweinshaxen'//
2///////////////////////////////////////////////////////////
//'Schwein' 'Schweinestall' 'Schweinefutter' 'Pouletbrüst'//
3///////////////////////////////////////////////////////////
//'Schweinestall' 'Schweinefutter' 'Schweinchen' 'Schwein'//
4///////////////////////////////////////////////////////////
//'Schweinestall' 'Schweinefutter' 'Schwein' 'Schweinerei'//
////////////////////////////////////////////////////////////

Ich möchte eine mySQL Abfrage starten, welche mir nur dijenigen Zeilen ausgibt,
in der das Wort 'Schwein' alleinstehend vorkommt, also:
Zeile 2, 3 und 4 ohne Zelle 1

Wie lautet die dazugehörige SQL Abfrage?

Ich habe die reglulären Ausdrücke studiert, bin bis jetzt auf keinen grünen Zweig gekommen.

MfG
Stefan

NB:
Kennt jemand den Unterschied zwischen REGEXP und RLIKE?

  1. Hi,

    unter Vorbehalt, weil ich nur den MS SQL Server kenne:

    select * from table_xyz where (datafield like '%Schwein%')

    Gruss,
    Luddie

    Guten Tag

    Ich habe in einer Spalte einer mySQL Datenbank Zellen mit:

    1///////////////////////////////////////////////////////////
    //'Schweinchensup' 'Sparschwein' 'Hängebauchschweinshaxen'//
    2///////////////////////////////////////////////////////////
    //'Schwein' 'Schweinestall' 'Schweinefutter' 'Pouletbrüst'//
    3///////////////////////////////////////////////////////////
    //'Schweinestall' 'Schweinefutter' 'Schweinchen' 'Schwein'//
    4///////////////////////////////////////////////////////////
    //'Schweinestall' 'Schweinefutter' 'Schwein' 'Schweinerei'//
    ////////////////////////////////////////////////////////////

    Ich möchte eine mySQL Abfrage starten, welche mir nur dijenigen Zeilen ausgibt,
    in der das Wort 'Schwein' alleinstehend vorkommt, also:
    Zeile 2, 3 und 4 ohne Zelle 1

    Wie lautet die dazugehörige SQL Abfrage?

    Ich habe die reglulären Ausdrücke studiert, bin bis jetzt auf keinen grünen Zweig gekommen.

    MfG
    Stefan

    NB:
    Kennt jemand den Unterschied zwischen REGEXP und RLIKE?

    1. select * from table_xyz where (datafield like '%''Schwein''%')

      ist Deiner Anforderung entsprechender.   :-)

      Gruss,
      Luddie

      1. Auf die Idee mit den Paltzhaltern % bin ich auch schon gekommen.
        '% schwein %' führt zum richtigen Resultat, aber nur wenn das Wort 'Schwein' inmitten von anderen Worten steht und dadurch am Anfang und am Schluss ein Leerschlag aufweist. Steht das Wort 'Schwein' am Anfang oder am Ende in der Zelle, so wie u.a. in meinem Beispiel, funktioniert dein Vorschlag nicht.

        Gruss
        Stefan

        select * from table_xyz where (datafield like '%''Schwein''%')

        1. Hi,

          die Where-Klausel darf auch erwietert wernden mit "and" oder "or"; z.B. where... and (datafiled like 'Schwein %')

          Mal ein wenig in der Doku nachlesen.

          Gruss,
          Luddie

          1. die Where-Klausel darf auch erwietert wernden mit "and" oder "or"; >>z.B. where... and (datafiled like 'Schwein %')

            Ja, wenn man die Abfrage so gestaltet:
            SELECT * FROM test WHERE (spalte LIKE '% schwein %') OR (spalte LIKE 'schwein %')OR (spalte LIKE '% schwein')

            führt sie zum gewnüschten Ergebnis.
            Vielen Dank!

            Ich frage mich nur, ob es nicht noch eine kürzere Möglicheit gibt.

            MfG
            STefan

            1. Halihallo Stefan

              die Where-Klausel darf auch erwietert wernden mit "and" oder "or"; >>z.B. where... and (datafiled like 'Schwein %')

              Ja, wenn man die Abfrage so gestaltet:
              SELECT * FROM test WHERE (spalte LIKE '% schwein %') OR (spalte LIKE 'schwein %')OR (spalte LIKE '% schwein')

              führt sie zum gewnüschten Ergebnis.
              Ich frage mich nur, ob es nicht noch eine kürzere Möglicheit gibt.

              Eigentlich sollte es auch mit %Schwein% funktionieren (ohne Spaces!), das % sollte eigentlich auch einen leeren String "matchen".

              %Schwein%

              sollte sowohl auf "Schwein", "Schweinshaxe", "Haxenschwein" passen. Ich nehme an, dass der "Fehler" durch die Leerstellen hervorgerufen wird.

              Eine einfachere Methode IMO gibt's nicht.

              Viele Grüsse

              Philipp

              1. Halihallo Stefan

                Eigentlich sollte es auch mit %Schwein% funktionieren (ohne Spaces!), das % sollte eigentlich auch einen leeren String "matchen".

                %Schwein%

                sollte sowohl auf "Schwein", "Schweinshaxe", "Haxenschwein" passen. Ich nehme an, dass der "Fehler" durch die Leerstellen hervorgerufen wird.

                Eine einfachere Methode IMO gibt's nicht.

                Sorry, als ich dein Ausgangsposting nochmals gelesen habe, habe ich festgestellt, dass ich etwas am Thema vorbeigezogen bin ;-(
                Natürlich müssen die Spaces dort stehen. Eine einfachere Methode, wie sie von Lude vorgeschlagen wurde, gibt's IMO nicht.

                Viele Grüsse

                Philipp

  2. Halihallo Stefan

    Ich möchte eine mySQL Abfrage starten, welche mir nur dijenigen Zeilen ausgibt,
    in der das Wort 'Schwein' alleinstehend vorkommt, also:
    Zeile 2, 3 und 4 ohne Zelle 1

    Wie lautet die dazugehörige SQL Abfrage?

    SELECT * FROM SchweineTabelle WHERE SchweineSpalte="Schwein";

    Ich habe die reglulären Ausdrücke studiert, bin bis jetzt auf keinen grünen Zweig gekommen.

    Dazu brauchst keine RegExpe, das verschwendet nur Performance.

    Viele Grüsse

    Philipp

    1. Merci für deine Antwort:

      SELECT * FROM SchweineTabelle WHERE SchweineSpalte="Schwein";

      Doch leider gibt mir diese Abfrage nicht das gewünschte Ergebnis. Es würde nur gerade diese Zeilen ausgeben, welche in der Spalte "schweineSpalte" genau ein Wort, nähmlich 'schwein' beinhalten. Dies ist bei mir nicht der Fall.
      Doch reguläre Ausdrücke?
      MfG
      Stefan

  3. Hallo!

    1///////////////////////////////////////////////////////////
    //'Schweinchensup' 'Sparschwein' 'Hängebauchschweinshaxen'//
    2///////////////////////////////////////////////////////////
    //'Schwein' 'Schweinestall' 'Schweinefutter' 'Pouletbrüst'//
    3///////////////////////////////////////////////////////////
    //'Schweinestall' 'Schweinefutter' 'Schweinchen' 'Schwein'//
    4///////////////////////////////////////////////////////////
    //'Schweinestall' 'Schweinefutter' 'Schwein' 'Schweinerei'//
    ////////////////////////////////////////////////////////////

    Ich möchte eine mySQL Abfrage starten, welche mir nur dijenigen Zeilen ausgibt,
    in der das Wort 'Schwein' alleinstehend vorkommt, also:
    Zeile 2, 3 und 4 ohne Zelle 1

    Wie lautet die dazugehörige SQL Abfrage?

    Ich habe die reglulären Ausdrücke studiert, bin bis jetzt auf keinen grünen Zweig gekommen.

    Naja, ich weiß jetzt nicht wie kompatibel die regulären Ausdrücke in MySQL sind, aber \b  sthe tnormalerweie für Wortgerenzen, also könnte der Ausdruck so heißen: /\bschwein\b/, was am Ende vermutlich noch performanter ist als 3 OR-verknüpfte WHERE Bedingungen mit Like.

    Ein andere Weg wäre ein Volltext-Index, der genau das macht, der trifft nur ganze Wörter, sowas wie SELECT schweinespalte FROM schweinetabelle WHERE MATCH (schweinespalte) AGAINST ('schwein'). Allerdings mußt Du hierfür einen Fulltextindex über die Spalte "schweinespalte" definieren.
    http://de.mysql.com/documentation/mysql/bychapter/manual.de_Reference.html#Fulltext_Search

    Kennt jemand den Unterschied zwischen REGEXP und RLIKE?

    Der "Unterschied" steht hier: http://de.mysql.com/documentation/mysql/bychapter/manual.de_Reference.html#IDX1185

    Grüße
    Andreas