2015-02-06 73 views
0

我一直在嘗試用逗號分隔符從另一個表的字段更新一個字段的值。用MYSQL更新另一個表的concat的值

這是我當前的代碼:

update programs set registered = (select user_id from users where reg_prog != 0) 

我得到#1242 MySQL錯誤。

我想有一個像這樣的列表:註冊用戶:47,97,10,618,5(這些是註冊程序的用戶的ID)。

任何幫助?

+1

顯示兩個表的結構 – Mihai 2015-02-06 10:22:51

+0

添加完整的錯誤消息。 – Jens 2015-02-06 10:24:03

+0

您在_programs_表的申請中是否有** WHERE **? – 2015-02-06 10:26:54

回答

2

不要這樣做。使用標準化數據模型。在數據庫字段中使用逗號分隔列表通常是一個非常糟糕的主意。你沒有辦法正確使用這些值,因爲你總是需要麻煩的字符串操作來處理這些事情。

如果您需要錄製註冊到程序的用戶,創建單獨的用戶,程序和關係表表對他們倆的:

_________   ______________   _________ 
| program |  | user2program |  | program | 
+---------+  +------------ +  +---------+ 
| id  | <--> | user_id  |  | name | 
| name |  | program_id | <--> | id  | 
---------   --------------   --------- 

它需要多一點的編程工作,保持這些表格的正確填充,但是您會發現它以這種方式更好地工作。

沒有一個單一的SQL語句可以做你正在尋找的問題。如果你有一個合適的數據模型,你需要先插入你的程序,那麼你的用戶,並在後面加上兩者之間的releation

INSERT INTO program (id, name) VALUES (1, "My Program"); 
INSERT INTO user (id, name) VALUES (1, "John Doe"); 
INSERT INTO user2program (user_id, program_id) VALUES (1, 1); 

爲了得到已註冊的程序的所有用戶,然後您可以使用帶有JOIN的SELECT語句:

SELECT p.name AS program_name, u.name AS user_name 
FROM program AS p 
JOIN user2program AS u2p ON p.id = u2p.program_id 
JOIN user AS u ON u.id = u2p.user_id 
WHERE p.id = 1 -- ID of the program