2012-04-15 4 views
0

Ich habe die folgende Tabelle my_table mit Primärschlüssel ID auf AUTO_INCREMENT festgelegt.Wie kann ich eine "Gruppe" von Zeilen hinzufügen und ihre "Gruppen-ID" in MySQL erhöhen?

id group_id data_column 
1 1   'data_1a' 
2 2   'data_2a' 
3 2   'data_2b' 

ich eine Abfrage erstellen bin stecken versuchen, die ein Array von Daten nehmen, sagen [ 'data_3a', 'data_3b'], und erhöht entsprechend die group_id zu ergeben:

id group_id data_column 
1 1   'data_1a' 
2 2   'data_2a' 
3 2   'data_2b' 
4 3   'data_3a' 
5 3   'data_3b' 

Ich denke, es wäre einfach, eine WITH-Klausel zu verwenden, aber dies wird in MySQL nicht unterstützt. Ich bin sehr neu in SQL, also vielleicht organisiere ich meine Daten die falsche Art und Weise? (Eine Gruppe soll eine Gruppe von Dateien repräsentieren, die zusammen über ein Formular hochgeladen wurden. Jede Zeile ist eine einzelne Datei und die Datenspalte speichert ihren Pfad).

Der „Psuedo SQL“ Code, den ich im Sinne hatte, war:

INSERT INTO my_table (group_id, data_column) 
VALUES ($NEXT_GROUP_ID, 'data_3a'), ($NEXT_GROUP_ID, 'data_3b') 
LETTING $NEXT_GROUP_ID = (SELECT MAX(group_id) + 1 FROM my_table) 

, wo die aus "LETTING Klausel nur einmal zu Beginn der Abfrage auswerten würde.

+0

Es scheint mir, wenn Sie die Werte für "data_column" aus den Werten der anderen Felder erstellen könnten, wäre "data_column" funktionell abhängig von den anderen Feldern und damit redundant. Wenn es sich um echte Daten handelt, muss jemand sie eingeben. – wildplasser

Antwort

0

Ich hätte lieber eine separate Tabelle für die Gruppen, wenn eine Gruppe Dateien darstellt, die zusammen gehören, vor allem, wenn Sie vielleicht speichern möchten Metadaten über diese Gruppe (wie der Benutzer, der hochgeladen wurde, das Datum usw.). Andernfalls (in diesem Fall) würden Sie redundante Daten erhalten (was meistens schlecht ist).

Alternativ hat MySQL etwas wie Variablen. Auschecken http://dev.mysql.com/doc/refman/5.1/en/set-statement.html

+1

Danke, eine separate Tabelle für die Gruppen macht sehr viel Sinn. – mmunoz

1

Sie können eine Transaktion starten, wählen Sie max (group_id) +1, und führen Sie dann die Einsätze. Oder sogar durch Sperren der Tabelle, so dass andere nicht ändern können (einfügen), wäre es möglich

Verwandte Themen