2013-01-09 34 views
5

Ich möchte Elemente von einer Tabelle in eine andere mit mySQL verschieben.MYSQL Werte aus einer anderen Tabelle in eine Spalte einfügen

Dies ist, was ich zur Zeit verwenden:

INSERT INTO items_rooms (item_id, room_id,x,y,n) 
SELECT id, room_id,x,y,z 
    FROM `items_phoenix` 

Dies funktioniert aber ich mehrere Werte in einer Spalte statt jeweils Werte in verschiedenen Spalten einfügen bin zu wollen.

Zum Beispiel:

In Tabelle items_rooms, würde ich Werte x und y mag aus items_phoenix in eine Spalte in items_rooms platziert werden.

Wenn x = 5 und y = 2, kann ich es in items_rooms wie folgt speichern: eine Spalte: 5.2 anstelle von verschiedenen Spalten für jeden Wert?

Entschuldigung, wenn das verwirrend ist!

Antwort

12

Sie können Ausdrücke in Ihrer SELECT-Spaltenliste verwenden. Solange die Spalten in der Auswahlliste und die Spalten in der Zieltabelle übereinstimmen in Anzahl und Datentyp können Sie etwas tun:

INSERT INTO items_rooms (item_id, room_id, x_dot_y, n) 
SELECT id, room_id, CONCAT(x,'.',y), z 
    FROM `items_phoenix` 
+0

Genau was ich brauchte. Vielen Dank !! – zuc0001

+1

Dies ist möglich, weil MySQL den angegebenen Typ nicht interessiert und entsprechend konvertiert wird. – tadman

0

Sie eine Verkettung für einen einfachen Fall verwenden können, zB:

INSERT INTO items_rooms (
    item_id, 
    room_id, 
    x_and_y, 
    n) 
SELECT 
    id, 
    room_id, 
    CONCAT(x, '.', y), 
    z 
FROM `items_phoenix` 
+0

Microsoft SQL Server verwendet '+' für String-Verkettung, aber MySQL nicht. –

+0

Kein MySQL-Experte, also hatte ursprünglich SQL Server-Syntax (@Zaffy, ich hatte '+". "+' In der ursprünglichen Bearbeitung, so dass es keine arithmetische Addition war). Bearbeitet, um die korrekte MySQL-Syntax widerzuspiegeln. –

0

Ja, wenn die Spalte Textinformationen speichern kann

Gerade CONCAT oder CONCAT_WS die Werte

INSERT INTO items_rooms (item_id, room_id, my_value, n) 
SELECT id, room_id, CONCAT_WS('.', x, y), z 
FROM `items_phoenix` 

SQL Fiddle DEMO

0

Sie auf jeden Fall kann dies tun. Siehe dazu die hilfreichen Antworten. Sie sollten jedoch darüber nachdenken, ob dies eine gute Idee ist. Sobald Sie verschiedene Spalten zu einer Art von Zeichenfolgenausdruck in einer Spalte denormalisieren, haben Sie etwas erstellt, das sehr schwierig zu verwalten und auch abzufragen ist. Sie machen damit Ihre Daten für Sie weniger brauchbar.

+2

Dies sollte ein Kommentar sein ... –

+0

@Joseph: Schwer zu sagen, für mich. Ich überlegte, ob ich es kommentieren sollte. Aber dann hatte ich das Gefühl, dass der Beratungs- und Mentoraspekt von SO auch in diesem Fall wichtig für die Frage war. – DWright

-2
$table_To_Get_From = mysql_query("SELECT * FROM items_phoenix (id, room_id,x,y,z)"); 
if($table_To_Get_From){ 
    $table = mysql_fetch_assoc($table_To_Get_From); 
    $values = array($table['id'],$table['room_id'],$table['x'],$table['y'],$table['z']); 
    mysql_query("INSERT INTO items_rooms (item_id, room_id,x,y,n) 
     VALUES ($values[0],$values[1],$values[2],$values[3],$value[4])"); 
} 

Ich habe sie nicht Saiten machen, so können Sie es $ values ​​[num] 'verwenden müssen

Dies wird einfügen, wie Sie wollen, wenn alle Werte ist da.

+0

Das sollte funktionieren. –

+3

Woher wissen Sie, dass das OP PHP verwenden kann? Was ist, wenn er Delphi, C++ oder was auch immer benutzt? Die Frage betrifft nur MySQL –

Verwandte Themen