因此,我想为MyBB改进一个shoutbox插件,并在pMA中执行以下操作。

私人呼喊存储为TEXT / VARCHAR:"/pvt userid message"。我要实现的目标是:


将userid中的值移动到新的INT列touid。
删除/pvt id前缀


先前的代码使用sscanf($message, "/pvt %d", $userID)
该查询将类似于UPDATE shouts SET touid=???, message=??? WHERE message LIKE '/pvt %'

@edit:示例:

/pvt 55 Hello world - this is a private shout!

/pvt 675 Another pm.

This is not a private shout

最佳答案

第一部分并不难:

update shouts
    set touid = substring_index(message, '/pvt ', -1) + 0
    where message LIKE '/pvt %';


这将拆分'/pvt '上的字符串,采用第二部分并将其转换为整数。 MySQL会进行静默转换,因此它将转换前导数字。

另一种方法是利用模式在开始的事实:

update shouts
    set touid = substr(message, 6, 1000) + 0
    where message LIKE '/pvt %';


您可以通过将其替换为任何内容来摆脱字符串的这一部分:

update shouts
    set touid = substring_index(message, '/pvt ', -1) + 0
        message = replace(message,
                          concat('/pvt ', substring_index(message, '/pvt ', -1) + 0),
                          '')
    where message LIKE '/pvt %';

关于mysql - MySQL将值从文本列内移动到新的INT列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29716836/

10-10 05:04