在mysql中切换列数据?

时间:2013-04-09 02:05:45

标签: mysql

我想尝试运行一个查询,它将更新我的表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");
希望有人可以帮助我。

2 个答案:

答案 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

见这里:http://www.sqlfiddle.com/#!2/d6b4f/1

答案 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;