basti_p: MySQL - Frage zu IN()

Hallo,

in meiner Tabelle stehen in einer Spalte "equipment" (Varchar 255) Werte wie "1,5,6,9" oder "7,4".
Wenn ich nun alle Datensätze mit "1" in dieser Spalte abfragen möchte, verwende ich diese Syntax:

SELECT id FROM tabelle WHERE 1 IN(equipment)

Das funktioniert auch wie gewünscht; wenn ich allerdings einen Wert abfrage, der als letztes in dem Feld steht - also im Beispiel 9 oder 4 - wird ein leeres Ergebnis zurückgegeben (wenn nur ein einzelner Wert ohne Komma im Feld steht, funktioniert es auch).

Wo liegt der Fehler?

Viele Grüße Basti

  1. Hi

    Wenn ich nun alle Datensätze mit "1" in dieser Spalte abfragen möchte,

    warum nicht:
    SELECT id FROM tabelle WHERE equipment='1';

    ??

    1. Hi,

      Wenn ich nun alle Datensätze mit "1" in dieser Spalte abfragen möchte,
      warum nicht:
      SELECT id FROM tabelle WHERE equipment='1';

      Weil er mehrere Daten in eine Spalte gequetscht hat.

      cu,
      Andreas

      --
      Warum nennt sich Andreas hier MudGuard?
      O o ostern ...
      Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
      1. upss

        Weil er mehrere Daten in eine Spalte gequetscht hat.

        hab mich verlesen.
        was ist mit lIKE?
        IN will glaube ich nur einen wert in der spalte

        1. Hallo,

          IN will glaube ich nur einen wert in der spalte

          Ich würde sagen, IN() ist durchaus für Datenreihen vorgesehen - mit LIKE würde die Suche nach 1 ja auch 11 liefern (bzw. bräuchte man noch Kommas am Anfang und am Ende des Feldes).

          Viele Grüße Basti

  2. Hi,

    in meiner Tabelle stehen in einer Spalte "equipment" (Varchar 255) Werte wie "1,5,6,9" oder "7,4".
    Wo liegt der Fehler?

    Im Datenmodell. Mehrere Werte in einer Spalte sollte es nicht geben.
    Da sollte es eine equipment-Tabelle geben, mit iddesdatensatzeszudemdasequipmentgehoert und equipmentart als Spalten.

    Abfrage dann per join.

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    O o ostern ...
    Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
    1. Hallo,

      Im Datenmodell. Mehrere Werte in einer Spalte sollte es nicht geben.
      Da sollte es eine equipment-Tabelle geben, mit iddesdatensatzeszudemdasequipmentgehoert und equipmentart als Spalten.

      Das ist an sich natürlich korrekt - klärt aber leider nicht das eigenartige Verhalten bzgl. IN():-(

      Viele
      Grüße Basti

  3. Tach!

    in meiner Tabelle stehen in einer Spalte "equipment" (Varchar 255) Werte wie "1,5,6,9" oder "7,4".
    Wenn ich nun alle Datensätze mit "1" in dieser Spalte abfragen möchte, verwende ich diese Syntax:
    SELECT id FROM tabelle WHERE 1 IN(equipment)

    FIND_IN_SET() passt laut seiner Beschreibung besser zu diesem Anwendungsfall, denn das will einen String mit kommaseparierten Werten. IN() will eigentlich eine kommaseparierte Liste mit Einzelwerten.

    dedlfix.

    1. Hallo,

      FIND_IN_SET() passt laut seiner Beschreibung besser zu diesem Anwendungsfall, denn das will einen String mit kommaseparierten Werten. IN() will eigentlich eine kommaseparierte Liste mit Einzelwerten.

      Besten Dank, das wars; diese Funktion kannte ich bislang noch nicht (und hätte sie auch nicht unter "Stringfunktionen" vermutet) - man lernt nie aus.

      Viele Grüße Basti

      1. Tach!

        FIND_IN_SET() [...]
        Besten Dank, das wars; diese Funktion kannte ich bislang noch nicht (und hätte sie auch nicht unter "Stringfunktionen" vermutet)

        Dabei suchst du doch einen Wert innerhalb eines Strings.

        dedlfix.

        1. Hallo,

          Dabei suchst du doch einen Wert innerhalb eines Strings.

          Das schon - aber bei String-Suchfunktionen denke ich eher an LIKE und weniger an das Durchsuchen der einzelnen Werte eines kommaseparierten Strings. Unter PHP hätte ich wahrscheinlich explode() und dann in_array() verwendet.

          Viel Grüße Basti