2016-09-29 5 views
0

benötigen mehrere Werte in der gleichen Zeile einzufügen, für i Beispiel müssen die verschiedenen Referrer einfügen kam für eine site.The Tabelle aussehenEinsatz mehrere Werte in der gleichen Reihe von MySQL-Tabelle

|Date |Ref   |Uri 
-------------------------- 
28/9 |ref1 ref2 ref3 |url1 

in der über der Tabelle für das gleiche Datum und den Link haben die 3 verschiedenen Referrer bekommen. Wie kann ich den Referrer in der gleichen Zeile für das bestimmte Datum speichern und einzelne Referrer abrufen. Hoffe haben meine Anforderung zu verstehen

+0

Gehen Sie für kommagetrennte Variablen. Wie ', ref1, ref2, ref3,'. Später können Sie die Werte mit Komma (in Ihrem Programm) explodieren und dann aufheben. Angenommen, Sie möchten nach allen Datensätzen von 'ref2' suchen, können Sie' like '%, ref%' ' – Rajesh

+1

verwenden. Sie sollten Daten in MySQL nicht so speichern. Jede Zeile darf keine Spalte enthalten, in der mehr als ein Wert gespeichert wird, wie durch Kommas, Leerzeichen oder etwas anderes getrennt. Statt dessen müssen Sie diese Daten in mehrere Zeilen aufteilen. Dadurch können Sie jede Zeile einfach abrufen, aktualisieren und löschen. – t9toqwerty

+0

Können wir Ihr Problem lösen? – rbr94

Antwort

2

Sie können dies tun, aber Sie sollten nicht. Es widerspricht der Datenbank Normalisierung Regeln, die Sie hier sehen können: https://en.wikipedia.org/wiki/Database_normalization.

Verwenden Sie eine weitere Tabelle, die den Primärschlüssel aus der obigen Tabelle enthält, und verbinden Sie ihn mit jeder Ref-Taste. Beispiel:

Bestehende Tabelle:

T-Id |Date |Uri 
-------------------------- 
1 | 28/9 |url1 
2 | 28/9 |url2 

Neue Tabelle:

Id | Ref-Id | T-Id 
-------------------------- 
1 | 1 | 1 
2 | 2 | 1 
3 | 3 | 1 
4 | 1 | 2 
5 | 3 | 2 
1

Zunächst müssen Sie das nicht tun sollte. Sie sollten Daten in MySQL nicht so speichern. Jede Zeile darf keine Spalte enthalten, in der mehr als ein Wert gespeichert ist, z. B. durch Kommas, Leerzeichen oder etwas anderes getrennt. Statt dessen müssen Sie diese Daten in mehrere Zeilen aufteilen. Dadurch können Sie jede Zeile einfach abrufen, aktualisieren und löschen.

Aber wenn Sie Daten so speichern möchten, sollten Sie für JSON-Datentyp gehen. Ab MySQL 5.7.8 unterstützt MySQL einen nativen JSON-Datentyp, der einen effizienten Zugriff auf Daten in JSON-Dokumenten (JavaScript Object Notation) ermöglicht.

Es kann mit JSON-Array gespeichert werden. Ein JSON-Array enthält eine Liste von Werten durch Kommata getrennt und eingeschlossen innerhalb Zeichen [und]:

["abc", 10, null, true, false] 

Tabelle ex erstellen:

CREATE TABLE `book` (
    `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, 
    `title` varchar(200) NOT NULL, 
    `tags` json DEFAULT NULL, 
PRIMARY KEY (`id`) 
) ENGINE=InnoDB; 

Insert Daten ab:

INSERT INTO `book` (`title`, `tags`) 
    VALUES (
    'ECMAScript 2015: A SitePoint Anthology', 
    '["JavaScript", "ES2015", "JSON"]' 
); 

Es Es gibt viele native Funktionen in MySql, um den JSON-Datentyp zu behandeln.

How to Use JSON Data Fields in MySQL Databases

Mysql JSON Data Type

In dem Fall, wenn Referer ein Unternehmen ist, können Sie viel Attribut können dann durch @ rbr94 wie vorgeschlagen tun. Wenn der Referer nicht mehr als ein Attribut hat, wird der Job ausgeführt, wenn Daten in mehreren Zeilen aufgeteilt werden oder JSON DataType verwendet wird. Endlich kommt es auf Ihre Wahl der Lösung an.

+0

Warum verwenden Sie keine separate Tabelle für Ihre "Tags". Es wird sehr schwierig sein, z.B. um alle Bücher zu finden, die den "Javascript" -Tag enthalten, wenn Sie es so machen – rbr94

+0

Ja, es ist auch eine gute Idee. Aber er kann die Daten mit JSON-Daten durchsuchen. – t9toqwerty

+1

Ich kenne diese Methode bis jetzt nicht. Aber es erscheint mir auch logisch. – rbr94

Verwandte Themen