【问题标题】:How to truncate value and add plus one from MySQL and display as default value for input?如何截断值并从 MySQL 添加加一并显示为输入的默认值?
【发布时间】:2016-06-14 06:42:51
【问题描述】:

我有 MySQL 数据库,其数据如下:

 id | name
 65 | 2016.C007
 65 | 2016.C006
... | ...

我写了这段代码来取回最后的数据:

function latestVersion() {

    $con = openLockMySQLdb('labcom', 'versions', 'READ'); 
    $q= mysql_query('SELECT name FROM versions ORDER BY name desc LIMIT 1', $con);
    $result = mysql_fetch_assoc($q);

    if ($result)
        echo date("Y").".".$result['name'];
    else
        echo "mistake";
    closeUnlockMySQLdb($con);
}

这个结果是:2016.2016.C007。但我想写出2016.C008。顺便说一句,我想在最后一个添加 +1 !!!

【问题讨论】:

  • 结果是这个2016.2016.C007。想要这个:2016.C008。如果是这样,那你为什么附加date("Y")
  • 因为我希望第一部分(“。”之前)是实际年份,而第二部分来自查询。
  • name列下的数据是不是一直都是year.CXXX这个格式?
  • 是的,总是这样。
  • 我的意思是C之后需要3个字符?

标签: php mysql sql html phpmyadmin


【解决方案1】:

基于此:

name列下的数据是不是一直都是year.CXXX这种格式? – 1000111

是的,它总是。 – 里克利14

这是查询:

SELECT
    CONCAT('C', LPAD(SUBSTRING(name FROM    LOCATE('.C' ,name) + 2 FOR (LENGTH(name) - LOCATE('.' ,name))) + 1,3,'0')) AS 'name'
FROM versions 
ORDER BY name 
DESC LIMIT 1

SQL FIDDLE DEMO


MORE:如果号码曾经达到或超过3位最大号码(即999),那么您需要采用以下查询:

用例场景:对于 2016.C999 中的 name 列中的值:

SELECT
    CONCAT(
        'C',
        LPAD(SUBSTRING(name FROM    LOCATE('.C' ,name) + 2 FOR (LENGTH(name) - LOCATE('.' ,name))) + 1,
            IF (
                SUBSTRING(name  FROM LOCATE('.C' ,name) + 2 FOR (LENGTH(name) - LOCATE('.' ,name))) + 1 >= 1000,
                CHAR_LENGTH(SUBSTRING(name  FROM LOCATE('.C' ,name) + 2 FOR (LENGTH(name) - LOCATE('.' ,name))) + 1),3  
            ),
            '0'
        )
    ) AS 'name'
FROM versions 
ORDER BY name 
DESC LIMIT 1;

FIDDLE DEMO OF IT

【讨论】:

  • 感谢您的帮助,我尝试了第一个查询,但结果是 2016.C1.5 。不是 2016.C008
  • 请检查一下FIDDLE。我假设您选择的名称列具有这样的值 2016.C007
  • 我检查了它,它适用于 FIDDLE,但是当我复制到我的代码中时,某处出现语法问题。但是,如果我这样写: CONCAT(\'C\', LPAD(SUBSTRING(name FROM LOCATE(\'.C\' ,name) + 2 FOR (LENGTH(name) - LOCATE(\'.\' ,name) ))) + 1,3,\'0\')) AS \'name\' FROM versions ORDER BY name DESC LIMIT 1', $con);没关系,但结果是 2016.C1.5
  • 您能运行这个SELECT name FROM versions ORDER BY name desc LIMIT 1 并在此处分享输出吗?
  • 那是原始版本。结果是:2016.2016.C007
猜你喜欢
  • 2014-05-07
  • 1970-01-01
  • 2014-06-14
  • 1970-01-01
  • 2017-01-07
  • 2020-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多