2013-01-09 115 views
5

我想要使用mySQL將項目從一個表移動到另一個表。MYSQL從另一個表中插入值到一列

這是我目前使用:

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

這工作,但我想多值插入到一列中,而不是在不同的列各值。

例如:

在表items_rooms,我想值x和y從items_phoenix被放置到一列中items_rooms。

如果x = 5,y = 2,我可以將它保存到像這樣的items_rooms中:一列:5.2代替每個值的不同列嗎?

對不起,如果這是混亂!

回答

12

您可以在SELECT列表中使用表達式。只要在數量和數據類型的目標表的匹配在選擇列表中的列與列,你可以做這樣的事情:

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

正是我需要的。謝謝 !! – zuc0001

+1

這是可能的,因爲MySQL不關心指定的類型,並會相應地進行轉換。 – tadman

0

可以使用串聯爲一個簡單的例子,如:

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使用'+'進行字符串連接,但MySQL不。 –

+0

不是MySQL專家,所以最初有SQL Server語法(@Zaffy,我在原始編輯中有'+「。」+',所以它不是算術加法)。編輯以反映正確的MySQL語法。 –

0

是的,如果列可以存儲文本信息

只是CONCATCONCAT_WS

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

你絕對可以做到這一點。請參閱此處的有用答案。但是,您應該考慮這是否是一個好主意。一旦你將不同的列非規範化爲一列中的某種字符串表達式,你就已經創建了一些非常難以維護和查詢的東西。這樣做會讓你的數據對自己的可用性降低。

+2

這應該是一個評論... –

+0

@約瑟夫:很難說這一個,對我來說。我考慮將它作爲評論。但後來我覺得在這種情況下,SO的指導和指導方面對於這個問題也很重要。 – 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])"); 
} 

我並沒有使他們的字符串,所以你可能需要使用「$值[NUM]」

這將插入它就像你想,如果有任何價值。

+0

這應該工作。 –

+3

你怎麼知道OP可以使用PHP?如果他使用Delphi,C++或其他什麼呢?這個問題只是關於MySQL –

相關問題