Set ohne 'Auflistung zuläsiger Werte'

Ist es in PHP und MySQL (getrennt voneinander) möglich, eine Art Set zu definieren, ohne eine ‚Auflistung zulässiger Werte‘ zu definieren?
In PHP gibt es die Option, alle Werte in ein Array zu speichern und bei Bedarf deren Existenz im Array zu prüfen, z.B.

$set=array(‚key‘,‚inf‘,2,‚test‘);
if (inarray(‚inf‘,$set) {…

Auch Hinzufügen ist möglich: $set[]=‚start‘;

Ist etwas ähnliches auch in MySQL möglich bzw. gibt es für PHP und MySQL bessere Varianten? Mir fällt da nur ein String der folgenden Art für MySQL ein: „‚key‘,‚inf‘,2,‚test‘“

sowas?

SELECT *
FROM table
WHERE
concat(inhalt LIKE „key“, inhalt like „inf“)

Auf Anhieb würde ich sagen, dass man in dem Fall das Array aus PHP serealisiert in der Datenbank abspeichert, dann musste den String nicht selber bauen.
Abfragen wären dann sowas wie:
SELECT * FROM tabellenname WHERE spalte LIKE ‚%„Wert“%‘

Nach dem Auslesen kannst es dann auch wieder unserialisieren und wieder als Array verwenden.

Ansonsten muss man bei sets in mysql immer definieren, was möglich sein soll.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi!

Ist das nicht etwas umständlich? Geht doch auch so:

SELECT * FROM meineTabelle
WHERE feldName1 IN ( 11, 13, 17 );

bzw.

SELECT * FROM meineTabelle
WHERE feldName2 IN ( „A“, „B“, „C“ );

Grüße
Heinrich

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Ein WHERE ist nicht nötig.

Es geht um eine Benutzerverwaltung. Den Benutzern sollen da beliebige Eigenschaften zugewiesen werden können, ohne dass die Gesammtheit der Eigenschaften irgendwo definiert wird.

Am Beispiel der Array-Lösungsvariante:
Erzeugen:blush:meyer=array(‚blond‘,‚175 groß‘,‚m‘);
Bearbeiten:blush:meyer[]=‚35 Jahre‘;
Boolean: if (inarray($meyer,‚20 Jahre‘))…

Das SET soll mit PHP erzeugt, bearbeitet und als Bedingung genutzt werden können. In MySQL soll dieses SET einfach nur gespeichert und wieder ausgelesen werden können.

Meine Idee:
Man könnte alle Werte des Arrays mit Trennzeichen hintereinander in einem String(MySQL) speichern (z.B. „blond;175 groß;m;35 Jahre“) und beim auslesen wieder in ein Array verwandeln.
Array->String: $text=implode(";",$meyer);
String->Array: $meyer=explode(";",$text);$

Da wollte ich fragen, ob jemand einen besseren Vorschlag hat.

Gruß

Meine Idee:
Man könnte alle Werte des Arrays mit Trennzeichen
hintereinander in einem String(MySQL) speichern (z.B.
„blond;175 groß;m;35 Jahre“) und beim auslesen wieder in ein
Array verwandeln.
Array->String: $text=implode(";",$meyer);
String->Array: $meyer=explode(";",$text);$

Da wollte ich fragen, ob jemand einen besseren Vorschlag hat.

naja, das sollte man dann besser mit serialize umnsetzen.
aber die loesung ist nicht gut - du fuehrst damit das prinzp einer db ad absurdum.

sinnvoll waere ein solches konstrukt, weil du damit die selbe flexibilität hast, aber die daten trotzdem in sql verwerten kannst:

table user
id | name
1 | meyer
2 | mustermann

table prefs
id | key | value
1 | haarfarbe | blond
1 | groesse | 1,75
2 | haarfarbe | braun
2 | groesse | 1,75
2 | income | 5000000

Daran habe ich noch gar nicht gedacht.
Einige Tabellen mehr, aber größere Flexibilität!
Mal sehen, ob ichs so mache

Danke.