mysql查询如何去掉多余零

 更新时间:2024年01月11日 15:49:29   作者:拿命搏未〃来  
这篇文章主要介绍了mysql查询如何去掉多余零问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

mysql查询去掉多余零

mysql 查询decimal去掉多余零 0+cast(field as char)

thinkphp指定查询字段方法增加$format参数

/**
     * 指定查询字段
     * @access public
     * @param mixed $field 字段信息
     * @param mixed $format 需要去掉多余0的 decimal字段
     * @return $this
     */
    public function field($field,$format=null)
    {
        if (empty($field)) {
            return $this;
        } elseif ($field instanceof Raw) {
            $this->options['field'][] = $field;
            return $this;
        }

        if (is_string($field)) {
            if (preg_match('/[\<\'\"\(]/', $field)) {
                return $this->fieldRaw($field);
            }

            $field = array_map('trim', explode(',', $field));
        }

        if (true === $field) {
            // 获取全部字段
            $fields = $this->getTableFields();
            $field  = $fields ?: ['*'];
        }

        if (isset($this->options['field'])) {
            $field = array_merge((array) $this->options['field'], $field);
        }
        if ($format) {
            $castField = [];
            if(is_string($format)) $format = explode(',',$format);
            if(is_array($format)){
                foreach($format as $v){
                    $asField = str_replace(".","_",$v);
                    $castField[] = '0+cast('.$v.' as char) AS '.$asField;
                }
            }
            $field = array_merge($field,$castField);
        }
        $this->options['field'] = array_unique($field);
        return $this;
    }

mysql查询常见问题

一、先排序后分组

1、MySQL版本5.6

首先order by然后group by

SELECT
    id,
    chat_id,
    content,
    create_time 
FROM
    ( SELECT id, chat_id, content, create_time FROM im_chat_message ORDER BY create_time DESC ) a 
GROUP BY
    chat_id 
ORDER BY
    create_time DESC

2、MySQL版本5.7

MySQL5.7对子查询进行了优化,认为子查询中的order by可以进行忽略,只要Derived table里不包含如下条件就可以进行优化:UNION clause、GROUP BY、DISTINCT、Aggregation、LIMIT or OFFSET

SELECT
    id,
    chat_id,
    content,
    create_time 
FROM
    ( SELECT id, chat_id, content, create_time FROM im_chat_message ORDER BY create_time DESC LIMIT 999999999 ) a 
GROUP BY
    chat_id 
ORDER BY
    create_time DESC

3、MySQL版本>=8.0

采用

ROW_NUMBER() over ( PARTITION BY chat_id ORDER BY create_time DESC )
SELECT
    id,
    chat_id,
    content,
    create_time 
FROM
    (
    SELECT
        id,
        chat_id,
        content,
        create_time,
        ROW_NUMBER() over ( PARTITION BY chat_id ORDER BY create_time DESC ) AS rn 
    FROM
        im_chat_message 
    ORDER BY
        create_time DESC 
    ) a 
WHERE
    rn =1

二、order by limit导致分页出现重复数据

从 MySQL 5.6 版本开始,优化器在使用 order by limit 时做了优化,导致排序字段没有使用索引时使用堆排序。

堆排序是不稳定的,多次排序后,各个数的相对位置发生了变化。

解决措施有两种方式:

1、排序字段加上索引。

2、在 order by 排序字段里,添加有索引的字段,比如主键ID。在排序时可以保证顺序稳定。

三、新增数据导致分页出现重复数据

新增数据导致数据总量发生了变化。

解决措施如下:

查询出当页数据后,记录本次拉取位置。

下次请求时,将上次获取的拉取位置传给后端,后端从该拉取位置开始分页。

 WHERE
   1 =1
   <if test="null != query.minId">
      and id &lt; #{query.minId}
   </if>
 LIMIT #{query.size}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • K8s 如何部署 MySQL 8.0.20 主从复制结构

    K8s 如何部署 MySQL 8.0.20 主从复制结构

    这篇文章主要介绍了K8s 如何部署 MySQL 8.0.20 主从复制结构,本次使用 OpenEBS 来作为存储引擎,OpenEBS 是一个开源的、可扩展的存储平台,它提供了一种简单的方式来创建和管理持久化存储卷,需要的朋友可以参考下
    2024-04-04
  • MySQL嵌套查询实例详解

    MySQL嵌套查询实例详解

    这篇文章主要介绍了MySQL嵌套查询的使用技巧,结合实例形式较为详细的分析了MySQL嵌套查询参数设置、使用方法与注意事项,需要的朋友可以参考下
    2015-12-12
  • 从MySQL得到最大的优化性能

    从MySQL得到最大的优化性能

    从MySQL得到最大的优化性能...
    2006-11-11
  • MySQL 复制表的方法

    MySQL 复制表的方法

    这篇文章主要介绍了MySQL 复制表的方法,帮助大家更好的理解和学习使用MySQL,感兴趣的朋友可以了解下
    2021-03-03
  • mysql触发器一个表改变另一个表也改变问题

    mysql触发器一个表改变另一个表也改变问题

    这篇文章主要介绍了mysql触发器一个表改变另一个表也改变问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • mysql创建表分区的实现示例

    mysql创建表分区的实现示例

    表分区是指根据一定规则,将数据库中的一张表分解成多个更小的,容易管理的部分,本文主要介绍了mysql创建表分区的实现示例,感兴趣的可以了解一下
    2024-01-01
  • MySQL创建和删除数据库的命令及相关PHP脚本的操作方法

    MySQL创建和删除数据库的命令及相关PHP脚本的操作方法

    这篇文章主要介绍了MySQL创建和删除数据库的命令及相关PHP脚本的操作方法,这里主要讲述Linux中在mysqladmin下的命令操作,需要的朋友可以参考下
    2015-11-11
  • mysql自增id超大问题的排查与解决

    mysql自增id超大问题的排查与解决

    这篇文章主要给大家介绍了关于mysql自增id超大问题的排查与解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-12-12
  • 浅谈Mysql、SqlServer、Oracle三大数据库的区别

    浅谈Mysql、SqlServer、Oracle三大数据库的区别

    这篇文章主要介绍了Mysql、SqlServer、Oracle三大数据库的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • Mysql8导入数据到Mysql5.7的实现步骤

    Mysql8导入数据到Mysql5.7的实现步骤

    Mysql8的默认字符集为utf8mb4,当我们有需求要把Mysql8的数据导入到Mysql5.7时,就会出现不支持,本文主要介绍了2种解决方法,具有一定的参考价值,感兴趣的可以了解一下
    2022-03-03

最新评论