我想尝试运行一个查询,它将更新我的表ptb_messages并切换两列的数据,例如heres my table:
id | to_user_id | from_user_id |
1 4 5
2 5 6
3 7 9
所以我想尝试做的是将from_user_id的值切换到to_user_id,反之亦然。
在我意识到一旦我将一个表中的值复制到另一个表之后,我将要使用它,那么另一列中的原始数据将被覆盖,
$sql = mysql_query("UPDATE ptb_messages SET ptb_messages.from_user_id=ptb_messages.to_user_id");
我真正需要的是交换功能,
我不确定如何做到这一点,但我想象它是这样的:
$sql = mysql_query("UPDATE ptb_messages SET to_user_id=from_user_id, from_user_id=to_user_id");
希望有人可以帮助我。
答案 0 :(得分:2)
嗯,mysql有一个名为user variable
的概念。您可以利用它来存储值并将其设置在用于交换的列上,
UPDATE Table1
SET to_user_id = from_user_id,
from_user_id = @r1
WHERE @r1 := to_user_id
见这里:http://www.sqlfiddle.com/#!2/8cd6a/1
如何自己加入桌子?
UPDATE Table1 a
INNER JOIN Table1 b
ON a.to_user_id = b.to_user_id AND
a.from_user_id = b.from_user_id
SET a.to_user_id = b.from_user_id,
a.from_user_id = b.to_user_id
答案 1 :(得分:1)
我会在那里提出一个答案,虽然我认为Skinny Pipes的答案更优雅。
您可以创建一个临时表来存储值。
http://www.sqlfiddle.com/#!2/3631d/1
create table ptb_messages_temp (
id int,
tempid int);
insert into ptb_messages_temp (id, tempid) (select id, to_user_id from ptb_messages);
-- DO THE UPDATE
UPDATE ptb_messages
LEFT OUTER JOIN ptb_messages_temp on ptb_messages.id=ptb_messages_temp.id
SET
ptb_messages.to_user_id=ptb_messages.from_user_id,
ptb_messages.from_user_id=ptb_messages_temp.tempid;