【问题标题】:switching column data in mysql? [duplicate]在mysql中切换列数据? [复制]
【发布时间】:2013-03-31 07:15:33
【问题描述】:

我想尝试运行一个查询,该查询将更新我的表 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");

希望有人可以帮助我。

【问题讨论】:

标签: mysql


【解决方案1】:

嗯,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

【讨论】:

  • 这仍然给我同样的问题,它更新 from_user_id 并将其复制到 to_user_id 但 to_user_id 没有被复制到 from_user_id :/
  • 如果我没记错的话,你绝对不能保证 to_user_id 会在 from_user_id 之前更新。
  • 我听不懂。它似乎适用于小提琴吧?
  • 查看我的更新答案。
  • 好的,你的更新对我来说看起来不错,+1 和欢呼。
【解决方案2】:

我要抛出一个答案,虽然我认为 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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-24
    • 1970-01-01
    • 2021-12-31
    • 2010-09-23
    • 1970-01-01
    相关资源
    最近更新 更多