Mysql Zeichenkette als Array ?



  • Ich habe in einem Feld 'params' folgendes stehen

    "4,6"

    Beide Id's sollen sich auf zwei verschiedene Tabellen beziehen.

    Und ich will jetzt alle einträge auslesen, welche einmal Id's 4 haben.

    -Oder zb. alle die Id's 6 haben.

    Wie soll ich das mit FindInSet mchen ? 😕



  • Irgendwie habe ich da Gefühl, dass ich dich nicht verstehe 🙄
    Du willst alle Einträge haben, bei denen entweder die erste oder die zweite ID z.B. 4 ist, dann folgendes:

    SELECT params FROM tabelle WHERE FIND_IN_SET('4',params) > 0
    


  • Ich will alle Einträge haben, bei denen die erste ID = 4 oder 5 ist.

    zb.

    SELECT params FROM tabelle WHERE IS_SET( '4', params) > 0
    

    Sowas in der Art müsste es geben.

    Es gibt zwar sowas schon in der Art, "MAKE_IN_SET" jedoch stimmt da der Syntax nicht mit einen gegebenheiten überein.



  • Ist zwar nicht sehr ellegant, aber meinst du von der Funktion her sowas:

    SELECT params FROM tabelle WHERE params LIKE '4,%' OR params LIKE '5,%'



  • Je nach dem, wie viele Sachen in params (auch ob immer mehrere) und auf wieviele due vergleichen willst, kannst du evtl. auch den Teil vor dem Komma extrahieren und dann damit in einem SET mit deinen zu suchenden Werten suchen 🙂



  • Hm,

    die methode ist eig. relativ unpraktisch. Ich betrachte ein Feldeintrage als Array,

    "item1,item2,..usw"

    jetzt ist item1 unabhängig von Item2, beide können/werden bei jedem aufruf anders interpretiert.

    Wenn ich alle Zeilen haben will, welche in einem bestimmten Feld das item2=4 haben, müssten ich dann folgenden Query aufrufen ??..

    SELECT params FROM tabelle WHERE params LIKE '%,4,%'

    oder 3. Item..
    SELECT params FROM tabelle WHERE params LIKE '%,%,%,3,%'

    Würde das so in der Art funktionierten ?



  • Habe gerade SUBSTRING_INDEX gefunden, das sieht eigentlich auch ganz gut aus 🙂
    Damit kannst du dir dein GET_ITEM selber basteln:

    SUBSTRING_INDEX(SUBSTRING_INDEX('id1,id2,id3,id4,id5',',', 3),',',-1)
    

    jetzt kannst du über die 1. Zahl (hier 3) direkt angeben, welches Element aus der Komma-separierten String-Liste (hier 'id1,id2,id3,id4,id5' - also in deinem Fall dort dann den Spaltennamen angeben) du haben willst 😋

    Konkret könnte das dann so aussehen:

    SELECT params FROM tabelle WHERE SUBSTRING_INDEX(SUBSTRING_INDEX(params,',', 2),',',-1) = 'wert_den_das_zweite_Feld_haben_soll'
    


  • Super Thx.

    Nur ist mir die FUnktion SUBSTRING_INDEX etwas suspekt.

    Gibt die Teilzeichenfolge von Zeichenkette zeichenkette vor zaehler Vorkommen des Begrenzers begrenzer zurück. Wenn zaehler positiv ist, wird alle links vom letzten Begrenzer zurückgegeben (von links gezählt). Wenn zaehler negativ ist, wird alles rechts vom letzten Begrenzer (von rechts gezählt) zurückgegeben:

    Irgendwie macht das keinen Sinn 🙂 🙂



  • Passt scho alles danke. 🙂



  • [Johnny] schrieb:

    Nur ist mir die FUnktion SUBSTRING_INDEX etwas suspekt.

    Gibt die Teilzeichenfolge von Zeichenkette zeichenkette vor zaehler Vorkommen des Begrenzers begrenzer zurück. Wenn zaehler positiv ist, wird alle links vom letzten Begrenzer zurückgegeben (von links gezählt). Wenn zaehler negativ ist, wird alles rechts vom letzten Begrenzer (von rechts gezählt) zurückgegeben:

    Irgendwie macht das keinen Sinn 🙂 🙂

    [...]

    Passt scho alles danke. 🙂

    Ich hab auch erst ein Weilchen gebraucht, bis ich es kapiert hatte 🤡


Anmelden zum Antworten