0

我想尝试运行一个查询,该查询将更新我的表 ptb_messages 并切换两列的数据,例如我的表:

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");

希望有人可以帮助我。

4

2 回答 2

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

于 2013-04-09T02:18:51.930 回答
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;
于 2013-04-09T02:25:16.210 回答