Gegenteil von MySQl X IN() gesucht

FIND_IN_SET() durchsucht eine komma-separierte 'Liste' von Strings (z.B. 1,3,45,wasweissich) mit einem Suchstring (z.B. 45); in der Regel gibt diese Fun ktion die Stelle des erstern Vorkommens des Suchstring zurück (hier 3).
Allerdings: ist in der Suchliste nur EIN String vorhanden, dann gibt die Funktion nichts zurück bzw 0.
Also: FIND_IN_SET() ist nur dann 'sinnvoll' anzu wenden, wenn mindesten 2 Strings in der Suchliste vorhanden sind.

Wobei mich das auf folgende Ergänzung zu meinem Beispiel mit CONCAT bringt:
Wenn in der Spalte Zutaten ebenfalls nur EIN Wert enthalten ist, dann ist das Ergebnis ebenfalls leer=es werden keine Datensätze zurückgegeben.

Beispiel:
ID Name Zutat
23 xyz 4

Damit auch dieser Datensatz gefunden wird, ist die WHERE-Klausel dann so zu ergänzen:
Code:
...
WHERE CONCAT(',', zutaten, ',') LIKE '%,4,%'
Der Inhalt des Feldes zutaten wird also am Anfang und am Ende mit einem Komma versehen, so dass die 'suchmaske' dann auch in o.a. Sonderfall greift ;)

In Deinem Fall ist also CONCAT() zu bevorzugen.
 
Hallo Sunny1245,

vielen Dank für deine Antwort, jedoch hab ich doch schon eine Tabelle mit den Produkten und eine mit den Zutaten, bei den Produkten wird die Zutaten ja schon gespeichert, daher muß es ja auch die möglichkeit, hier eine direkte Abfrage zu starten, ohne eine weitere (dritte) Tabelle zu verwenden.

Zudem wird bei einem Produkt ja mehr als eine Zutat in einem Feld (Spalte) gespeichert.


...Und damit ich auch noch meine Senf dazugeben kann :-)

Der Vorschlag von Sunny1245 ist er einzige *korrekte* Weg dies zu lösen, ich würde dir dringendst empfehlen, dies so umzusetzen, da deine Lösung keine *sauberes* Model ist


Gruss
 
Zurück