V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
9
V2EX  ›  问与答

MySQL 无法做到 select * [but not select id] from table ?

  •  
  •   9 · 2013-11-05 14:28:09 +08:00 · 3635 次点击
    这是一个创建于 4036 天前的主题,其中的信息可能已经有所发展或是发生改变。
    业务逻辑需要复制一行记录,但是里面有个 AI 字段,所以想 select 除了 AI 的所有的字段来插入。在 stackoverflow 上找了下似乎不可行?MySQL的选择语法太弱了吧?

    有其他方法复制一行记录吗?
    6 条回复    1970-01-01 08:00:00 +08:00
    chenwl
        1
    chenwl  
       2013-11-05 14:30:15 +08:00
    结果放在数组里,再处理下不行吗?
    justfindu
        2
    justfindu  
       2013-11-05 15:23:34 +08:00
    那就一个个字段写
    lenmore
        3
    lenmore  
       2013-11-05 15:26:32 +08:00
    手写全部字段,
    或者,
    从系统表读取该表的所有列,排除掉你要排除的列,再拼一条SQL语句。
    9
        4
    9  
    OP
       2013-11-05 17:47:55 +08:00
    @chenwl @justfindu @lenmore

    手写全部字段很蛋疼的,以后这个表每加一个字段,还要回来这里改。

    暂时的解决方案:

    1. SHOW COLUMNS FROM table 获得所有列;
    2. 把结果保存为数组,然后排除掉不需要的 id 列, 再拼接 $col_str = implode(', ', $cols_ary);
    3. 插入数据,完成.

    INSERT INTO table (
    $col_str
    ) SELECT $col_str
    FROM table
    WHERE id = 1;
    ch3nz
        5
    ch3nz  
       2013-11-05 19:35:49 +08:00
    如果查询出来的结果是一个数组,unset($result['id'])不就对了。
    shinwood
        6
    shinwood  
       2013-11-05 20:48:41 +08:00
    你也可以 foreach 一下,如果 = id 的话,直接 continue 做过滤,这些 Model 层做的事情,不要给数据库太大压力。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1628 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 19ms · UTC 16:55 · PVG 00:55 · LAX 08:55 · JFK 11:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.