Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Speichern eines Arrays unbekannter Länge

Wenn Sie sich in einer Situation befinden, in der Sie beginnen, column1 zu haben , column2 auf dem Tisch - es besteht die Möglichkeit, dass Ihr Design fehlerhaft wird, und Sie sollten stattdessen eine separate Tabelle erstellen - in der jede columnX bekommt eine eigene Reihe. Es ist (fast) immer besser, eine separate Tabelle zu haben, wenn Sie mehrere sich wiederholende Spalten in derselben Tabelle haben.

Auf diese Weise vermeiden Sie das Speichern von durch Kommas getrennten Werten in Spalten, Sie vermeiden, dass Ihr Code/Ihre Abfragen beschädigt werden, wenn Sie plötzlich einen anderen Wert column{X+1} einfügen müssen - und kann stattdessen so viele oder so wenige Eingabewerte haben, wie Sie brauchen.

Für Sie wäre das so etwas wie eine neue Tabelle namens land_owner_input , wo Sie den Wert haben (den Sie in columnX einfügen würden ) und einen Verweis auf die Zeile in land_owner zu der der Wert gehört.

Ein typisches Designmuster wäre etwa so.

CREATE TABLE land_owner_input (
    land_owner_input_id INT(11) AUTO_INCREMENT
    land_owner_id INT(11), 
    land_owner_input_value VARCHAR(MAX)
);

Denken Sie daran, dass Ihre land_owner_id in der neuen Tabelle sollte genau den gleichen Typ und die gleiche Größe haben wie die ID, auf die sie verweist.

Sie können auch eine Fremdschlüsseleinschränkung zwischen land_owner_id erstellen und die ID des land_owner Tabelle, um die Datenintegrität sicherzustellen.

Sobald Sie Ihre neue Tabelle haben, können Sie sie zusammen mit einem LEFT JOIN abfragen (oder ein normales JOIN wenn Sie nur Zeilen zurückgeben möchten, wenn es Eingabewerte hat).

SELECT *
FROM land_owner AS lo
LEFT JOIN land_owner_input AS loi
    ON loi.land_owner_id = lo.land_owner_id